可能重复:
IDictionary or NameValueCollection
有什么理由我应该使用Dictionary而不是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...
//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
}
对于这些用例,使用一种比使用另一种有什么优势吗?在性能、内存使用、排序顺序等方面有什么不同?
发布于 2010-06-09 04:41:34
它们在语义上并不相同。NameValueCollection
可以有重复的密钥,而Dictionary
不能。
就我个人而言,如果你没有重复的密钥,那么我会坚持使用Dictionary
。它更现代,使用了IEnumerable<>
,这使得它很容易与Linq
查询混合在一起。您甚至可以使用Linq
ToDictionary()
方法创建一个Dictionary
。
发布于 2010-06-09 04:55:35
NameValueCollection
是string
类型的,而Dictionary
利用泛型来允许类型差异。参见Benefits of Generics。
发布于 2010-06-09 04:59:22
Dictionary
将会快得多。NameValueCollection
允许重复的密钥。这在某些情况下可能是不好的,或者在其他情况下是想要的。Dictionary
不允许密钥重复。
来自:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
Dictionary<(Of <(TKey, TValue>)>)
泛型类提供了从一组键到一组值的映射。添加到字典中的每个内容都包含一个值及其关联的键。通过使用值的键来检索值非常快,非常接近O(1)
,因为Dictionary<(Of <(TKey, TValue>)>)
类是作为哈希表实现的。
https://stackoverflow.com/questions/3001108
复制相似问题