当我调用ConfigurationManager.AppSettings.AllKeys时,我是否总是以相同的顺序获得密
本文关键字:顺序 AppSettings ConfigurationManager 调用 AllKeys 是否 | 更新日期: 2023-09-27 18:08:16
对于web.config
和app.config
,当我调用ConfigurationManager.AppSettings.AllKeys
时,我是否一直以相同的顺序获得它们在配置文件中出现的密钥?
我在MSDN上找不到任何提及
ConfigurationManager.AppSettings
为NameValueCollection
型,其顺序未定。AllKeys
返回基于NameValueCollection
的字符串数组,因此它的顺序也是不确定的。
看到:NameValueCollection
该类型的集合不保留元素的顺序,并且枚举集合时不保证特定的顺序。
如果你想要一个明确的顺序,使用
ConfigurationManager.AppSettings.AllKeys.OrderBy(r=> r)
为什么这很重要?这是一个键集合:如果顺序对你来说很重要,那就按你想要的顺序排列。您还应该记住,<appsettings>
中的数据来自多个来源。它是从
- 机器配置(
machine.config
) - 应用配置(
app.config
) < - 特定于用户的配置/gh>
- IIS应用主机配置
- root
web.config
- 在IIS的应用程序路径中的
web.config
文件中的任何一个。
进一步,ConfigurationManager.AppSettings
是NameValueCollection
。我怀疑但不确定它的后台存储是一个哈希表。在这里,您将看到的顺序与
- 键的计算散列值,
- 这些键被分配到的哈希桶,和
- 插入顺序(实际上是操作顺序—插入和删除,因为删除可能会在哈希桶中留下一个空槽,由随后的插入填充)。
同一组键,如果按不同的顺序插入,在检索时会显示不同的顺序。