C# KeyValuePair与NameValueCollection

C# KeyValuePair与NameValueCollection,c#,.net,collections,C#,.net,Collections,还有其他一些问题,比如KeyValuePair和IDictionary,但我觉得这一个略有不同 NameValueCollection接受字符串键和字符串值 KeyValuePair就像一本字典,您可以告诉它键和值的类型 我不明白为什么存在NameValueCollection。用字符串类型初始化KeyValuePair似乎就足够了。我还注意到,NameValueCollection还有一些方法可用,但是为什么不将这两个类合并为一个呢?存在于.NET 1.0和1.1中,是一种泛型类型,直到2.0

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

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

KeyValuePair
就像一本字典,您可以告诉它键和值的类型


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

存在于.NET 1.0和1.1中,是一种泛型类型,直到2.0才添加到.NET中。所有的类都早于泛型的加入;它包含某些强类型(如果您愿意,可以进行专门化)以便在用户不必从对象转换为字符串时使用。

A
KeyValuePair
与字典不同。它只是一个包含键和值的元组

NameValueCollection
是相当于
IList
的包装(注意
NameValueCollection
早于泛型)-像
Get(string)
这样的操作是
O(n)
的,可以通过索引获取项,每个键映射到一个或多个值(这与
字典
不同)

原因如下所述:

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

对于
NameValueCollection
,具有类似行为的较新的“替换”数据结构是。(但是,它不直接支持与spender notes相同的不可变操作。)

快乐编码。

是用于迭代

var字典=新字典
foreach(字典中的var kvp)
{
//kvp是KeyValuePair.kvp.Key是int键,kvp.Value是键的长值
}

是可索引的。

A
KeyValuePair
不像字典。它只是一个包含键和值的元组。@pst,字典获取键/值对列表。我看不出有什么不同。@Nick
var kvp=new KeyValuePair(“Hello”,“World!”)
--@Nick:字典只能有每个键中的一个。我相信我的误解是,听写器包含键值对,其中键值对是单数,例如,您不能一直添加到上面的pst的
kvp
示例中。在这种情况下,查找的主要问题是它是不可变的,而NaveValueCollection可以添加到。因此,它不是真正的“替代品”,而是具有类似的行为。
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
}