c# - .net 配置文件 AppSettings : NameValueCollection vs. KeyValueConfigurationCollection

标签 c# .net vb.net configuration app-config

访问当前应用程序的 appSettings 时,我得到一个 NameValueCollection:

NameValueCollection settings =
    ConfigurationManager.AppSettings;

当访问另一个应用程序的 appSettings 时,我得到一个 KeyValueConfigurationCollection:

KeyValueConfigurationCollection settings = 
    ConfigurationManager.OpenExeConfiguration(sExe).AppSettings.Settings;

  1. 这两个方法(ConfigurationManager.AppSettingsAppSettingsSection.Settings)具有相似但不同(且不兼容)的返回类型是否有原因?也许我在这两种情况之一中使用了过时的方法?

  2. 有没有一种简单的方法可以在两种情况下获取相同的类型,即获取另一个应用程序的 appSettings 的 NameValueCollection 或当前运行的应用程序的 appSettings 的 KeyValueConfigurationCollection?


更新:对于问题 2,我发现以下方法可以将当前运行(非网络)应用程序的配置获取为 KeyValueConfigurationCollection:

KeyValueConfigurationCollection settings = 
    Configuration.ConfigurationManager.OpenExeConfiguration(Configuration.ConfigurationUserLevel.None).AppSettings.Settings;

最佳答案

两者都试图解决相同的问题,并且它们与相同的配置模式兼容,但正如您所说,不同之处在于它们在不同的开发时代发展。

但这并不是说您使用的是过时的版本。这些是获得相同结果的不同方法。也许您不明白为什么,但重点是有时您需要从不同的来源获取您的配置,因此选择这些选项是有意义的。

回答您的第二个问题,您可以为两种返回类型实现扩展方法,将它们转换为通用类型。

<罢工>

例如,如果您想要 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 时代。但这并没有过时,因为这是(目前)的做法。

关于c# - .net 配置文件 AppSettings : NameValueCollection vs. KeyValueConfigurationCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4782384/

相关文章:

c# - 如何更改按下键盘按键时的 TrackBar 控件操作?

c# - 在查询中将 DateTime.Ticks 转换为 MySQL DateTime

c# - String.replace "\\"为 "/"

mysql - vb.net/mysql 在 TextBox 中显示多于 1 行

c# - Mongo C# 驱动程序 : Deserialize BsonValue

.net - Powershell正则表达式用于随机除以回车符的字符串

mysql - 将 blob 字符串保存到 mysql

c# - asp.net mvc url中的双引号

c# - 为什么赋值运算符在 C# 中返回分配的值?

c# - delegate.Invoke 是如何工作的?