首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NameValueCollection vs Dictionary<string,string>

NameValueCollection vs Dictionary<string,string>
EN

Stack Overflow用户
提问于 2010-06-09 04:39:11
回答 3查看 93.3K关注 0票数 99

可能重复:

IDictionary or NameValueCollection

有什么理由我应该使用Dictionary而不是NameValueCollection?

(在C# / .NET框架中)

选项1,使用NameValueCollection:

代码语言:javascript
复制
//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...

代码语言:javascript
复制
//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
}

对于这些用例,使用一种比使用另一种有什么优势吗?在性能、内存使用、排序顺序等方面有什么不同?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-09 04:41:34

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

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

票数 130
EN

Stack Overflow用户

发布于 2010-06-09 04:55:35

NameValueCollectionstring类型的,而Dictionary利用泛型来允许类型差异。参见Benefits of Generics

票数 19
EN

Stack Overflow用户

发布于 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>)>)类是作为哈希表实现的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3001108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档