NameValueCollection vs Dictionary <string,string>

可能重复:
IDictionary <string,string>或NameValueCollection

任何理由我应该使用Dictionary <string,string>而不是NameValueCollection?

(在C#/ .NET框架中)

选项1,使用NameValueCollection:

//enter values: NameValueCollection nvc = new NameValueCollection() { {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"} }; // retrieve values: foreach(string key in nvc.AllKeys) { string value = nvc[key]; // do something } 

选项2,使用Dictionary <string,string> …

 //enter values: Dictionary<string, string> dict = new Dictionary<string, string>() { {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"} }; // retrieve values: foreach (KeyValuePair<string, string> kvp in dict) { string key = kvp.Key; string val = kvp.Value; // do something } 

对于这些用例,使用一个还是另一个有什么好处? 在性能,内存使用,sorting顺序等方面有什么不同?

它们在语义上不相同。 NameValueCollection可以有重复键,而Dictionary不能。

就个人而言,如果你没有重复的密钥,那么我会坚持与Dictionary 。 它更现代,使用IEnumerable<> ,这使得易于与Linq查询混合。 您甚至可以使用Linq ToDictionary()方法创build一个Dictionary

NameValueCollection是stringtypes,而Dictionary则利用generics来允许types差异。 查看generics的好处 。

字典会快得多。 NameValueCollection允许重复键。 在某些情况下这可能是不好的,或者在其他情况下需要。 字典不允许重复键。

来自: http : //msdn.microsoft.com/en-us/library/xfhwa508.aspx

Dictionary <(Of <(TKey,TValue>)>)generics类提供了从一组键到一组值的映射。 字典中的每一项都包含一个值及其相关的键。 因为Dictionary <(Of <(TKey,TValue>))>类被实现为一个哈希表,所以使用它的键检索一个值非常快,接近于O(1)。