Ответ 1
Оба пытаются решить одну и ту же проблему, и они совместимы с одной и той же конфигурационной схемой, но разница заключается в том, что оба варианта эволюционировали в разное время разработки, как вы сказали.
Но это не значит, что вы используете устаревшие версии. Это разные способы получить тот же результат. Возможно, вы не можете понять, почему, но иногда вам нужно получить конфигурацию из разных источников, поэтому иметь смысл иметь эти параметры.
Отвечая на второй вопрос, вы можете реализовать метод расширения для обоих типов возвращаемых данных, преобразуя их в общий тип.
Например, если вы хотите 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 дней. Но это не устарело, потому что это способ сделать это (на данный момент).