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)。