【问题标题】:Will I always get the keys in the same order when I call ConfigurationManager.AppSettings.AllKeys当我调用 ConfigurationManager.AppSettings.AllKeys 时,我是否总是以相同的顺序获取密钥
【发布时间】:2014-06-11 17:45:18
【问题描述】:

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

我在 MSDN 上找不到任何提及。

【问题讨论】:

  • 最有可能,但我认为不能保证。

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


【解决方案1】:

ConfigurationManager.AppSettingsNameValueCollection 类型,它们的顺序未确定。 AllKeys 基于NameValueCollection 返回字符串数组,因此它的顺序也将是不确定的。

见:NameValueCollection

这种类型的集合不保留元素的顺序,并且 枚举集合时不保证特定的顺序。

如果你想要一个明确的顺序使用

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

【讨论】:

    【解决方案2】:

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

    的某个子集检索到的
    • 机器配置(machine.config)
    • 应用程序配置 (app.config)
    • 用户特定配置
    • IIS 应用程序主机配置
    • web.config
    • IIS 中的应用程序路径中的许多 web.config 文件中的任何一个。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2023-04-11
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多