【问题标题】: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.config 和app.config,当我调用ConfigurationManager.AppSettings.AllKeys 时,我是否始终按照它们在配置文件中出现的顺序获取密钥?
我在 MSDN 上找不到任何提及。
【问题讨论】:
标签:
c#
web-config
app-config
configurationmanager
appsettings
【解决方案1】:
ConfigurationManager.AppSettings 是NameValueCollection 类型,它们的顺序未确定。 AllKeys 基于NameValueCollection 返回字符串数组,因此它的顺序也将是不确定的。
见:NameValueCollection
这种类型的集合不保留元素的顺序,并且
枚举集合时不保证特定的顺序。
如果你想要一个明确的顺序使用
ConfigurationManager.AppSettings.AllKeys.OrderBy(r=> r)
【解决方案2】:
这有什么关系?这是一个键控集合:如果顺序对您很重要,请按照您想要的顺序放置。您还应该记住,<appsettings> 中的数据来自多个来源。它是从
的某个子集检索到的
- 机器配置(
machine.config)
- 应用程序配置 (
app.config)
- 用户特定配置
- IIS 应用程序主机配置
- 根
web.config
- IIS 中的应用程序路径中的许多
web.config 文件中的任何一个。
此外,ConfigurationManager.AppSettings 是 NameValueCollection。我怀疑——但不确定——它的后备存储是一个哈希表。因此,您将看到的排序与
- 键的计算哈希值,
- 分配了这些键的哈希桶,以及
- 插入顺序(实际上是操作顺序 - 插入和删除,因为删除可能会在哈希桶中留下一个空槽,由后续插入填充)。
以不同顺序插入的同一组键在检索时会显示不同的顺序。