当我调用ConfigurationManager.AppSettings.AllKeys时,我是否总是以相同的顺序获取密钥

时间:2014-06-11 17:45:18

标签: c# web-config app-config configurationmanager appsettings

对于web.configapp.config,当我拨打ConfigurationManager.AppSettings.AllKeys时,是否按照它们在配置文件中出现的顺序获取密钥?

我无法在MSDN上找到任何提及。

2 个答案:

答案 0 :(得分:0)

ConfigurationManager.AppSettings的类型为NameValueCollection,其顺序尚未确定。 AllKeys基于NameValueCollection返回字符串数组,因此其顺序也将不确定。

请参阅:NameValueCollection

  

此类型的集合不保留元素的排序,和   枚举集合时不保证特定的排序。

如果您想要明确的订单,请使用

ConfigurationManager.AppSettings.AllKeys.OrderBy(r=> r)

答案 1 :(得分:0)

为什么重要?它是一个键控集合:如果订单对您很重要,请按照您想要的顺序进行。您还应该记住<appsettings>中的数据来自多个来源。它是从

的某个子集中检索的
  • 机器配置(machine.config
  • 应用程序配置(app.config
  • 特定于用户的配置
  • IIS应用程序主机配置
  • root web.config
  • IIS中应用程序路径中的任意web.config个文件。

此外,ConfigurationManager.AppSettingsNameValueCollection。我怀疑 - 但不确定 - 它的后备存储是一个哈希表。因此,您将看到的订单与

相关
  • 键的计算哈希值,
  • 分配了这些密钥的哈希桶,以及
  • 插入顺序(实际上,操作顺序 - 插入和删除,因为删除可能会在哈希桶中留下一个空插槽,后续插入会填充该空插槽。)

以不同顺序插入的同一组键在检索时会显示不同的顺序。