Оба пытаются решить одну и ту же проблему, и они совместимы с одной и той же схемой конфигурации, но разница заключается в том, что оба они развивались в разное время разработки, как вы сказали.
Но этоне о том, что вы используете устаревшие версии.Это разные способы получить один и тот же результат.Может быть, вы не можете понять, почему, но дело в том, что иногда вам нужно получить свою конфигурацию из разных источников, поэтому имеет смысл иметь эти опции.
Отвечая на второй вопрос, вы можете реализовать метод расширениядля обоих возвращаемых типов преобразование их в общий тип.
Например, если вы хотите NameValueCollection, вы можете реализовать это:
public static NameValueCollection ToCollection(this KeyValueConfigurationCollection source)
{
// An iterator to create a NameValueCollection here and return it.
}
Или, если вы хотите KeyValueConfigurationCollection, вы можете сделать то же самое, но для возврата экземпляров этого типа.
Затем, когда вам нужны AppSettings, вы можете сделать ConfigurationManager.AppSettings.ToCollection();
и / или ConfigurationManager.OpenExeConfiguration(sExe).AppSettings.Settings.ToCollection();
. Проверить редактирование ответа автора!Эта часть моего ответа неверна и бесполезна :) Спасибо.
На самом деле коллекции имен и значений в какой-то степени устарели, поскольку они были получены в .net 1.x дней.Но это не устарело, потому что это способ сделать это (пока).