Luk*_*uke 10 .net c# configuration app-config configsection
在.NET中,我们可以使用<configSections>元素创建自定义配置节,如下所示:
<configuration>
<configSections>
<section name="dictionarySample"
type="System.Configuration.DictionarySectionHandler"/>
<section name="nameValueSample"
type="System.Configuration.NameValueSectionHandler" />
</configSections>
<dictionarySample>
<add key="key1"
value="value1"/>
</dictionarySample>
<nameValueSample>
<add key="key2"
value="value2" />
</nameValueSample>
</configuration>
Run Code Online (Sandbox Code Playgroud)
上面,我定义了两个部分.一种类型DictionarySectionHandler,另一种类型NameValueSectionHandler.
据我所知,这两个处理程序以完全相同的方式使用,并导致相同的配置部分.
那么,是否存在差异,或者我可以互换使用它们吗?
Luk*_*uke 11
TL; DR NameValueSectionHandler适用于简单情况下的string- > string对,但如果您需要配置有效(特别是如果您要remove重复使用),请使用DictionarySectionHandler.
我挖掘了这两个类的来源(NameValue,Dictionary),发现实现上差别很小.
但有两件事值得注意:
DictionarySectionHandler将其键/值对存储在a中Hashtable,而NameValueSectionHandler使用a NameValueCollection.DictionarySectionHandler,value不是必需的,如果没有提供,将默认为空字符串,但NameValueSectionHandler需要value.至于Hashtable和之间的区别NameValueCollection,NameValueCollection可以有重复的键,但Hashtable不能.此外,Hashtable它的实现效率非常高.
这篇关于MSDN博客的文章有一些关于Hashtable和的好信息NameValueCollection.
总结他们的发现,Hashtable是......
他们在文章中总结了一些关于何时使用的有用信息NameValueCollection:
所以你可能想知道你什么时候想要使用NameValueCollection.NameValueCollection只接受作为字符串的键和值,因此这是一个非常专业的集合.在需要将多个值与键相关联,或者执行基于散列的查找以及按索引查找(并且希望不执行太多删除)的情况下,它非常有用.
但是,如果需要存储字符串键/值对,并且不需要执行基于索引的查找或将多个值与键关联,则可能更喜欢使用通用的Dictionary类.这在所有情况下都具有与Hashtable相同的渐近行为,并且还避免了因拳击造成的任何成本.
| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |