KeyValuePair与NameValueCollection

时间:2011-05-27 01:29:59

标签: c# .net collections

还有其他一些问题,比如KeyValuePair和IDictionary,但我觉得这个问题略有不同。

NameValueCollection接受字符串键和字符串值。

KeyValuePair就像一本字典,你告诉它键和值是什么类型。

我不明白为什么NameValueCollection存在。使用字符串类型初始化KeyValuePair似乎就足够了。我还注意到NameValueCollection有更多可用的方法,但为什么不将两个类合并为一个呢?

3 个答案:

答案 0 :(得分:13)

KeyValuePair不像字典。它只是一个包含Key和Value的元组。

NameValueCollection相当于 IList<KeyValuePair<string,IList<string>>>的包装(注意NameValueCollection早于泛型) - Get(string)之类的操作是{{1}可以通过索引获取和项目,每个键映射到一个或更多值(这与O(n)不同)。

the NameValueCollection documentation

解释了这个问题的原因
  
    

此类可用于标题,查询字符串和表单数据。

  

Dictionary<string,string>某些类似行为的较新“替换”数据结构为Lookup<string,string>。 (但是,它并不直接支持与花费注释一样不可变的操作。)

快乐的编码。

答案 1 :(得分:3)

.NET 1.0和1.1中存在

NameValueCollectionKeyValuePair是泛型类型,直到2.0才添加到.NET。 System.Collections.Specialized中的所有类都早于添加泛型;它包含某些强类型(如果你愿意的话),当你需要用户不需要从对象转换为字符串时使用它。

答案 2 :(得分:0)

KeyValuePair是您用来迭代Dictionary

的组件
var dictionary = new Dictionary<int,long>

foreach(var kvp in dictionary)
{
    // kvp is KeyValuePair<int,long>. kvp.Key is the int key and kvp.Value is the long value for the key
}

NameValueCollection是可转位的。