C# KeyValuePair与NameValueCollection
还有其他一些问题,比如KeyValuePair和IDictionary,但我觉得这一个略有不同C# KeyValuePair与NameValueCollection,c#,.net,collections,C#,.net,Collections,还有其他一些问题,比如KeyValuePair和IDictionary,但我觉得这一个略有不同 NameValueCollection接受字符串键和字符串值 KeyValuePair就像一本字典,您可以告诉它键和值的类型 我不明白为什么存在NameValueCollection。用字符串类型初始化KeyValuePair似乎就足够了。我还注意到,NameValueCollection还有一些方法可用,但是为什么不将这两个类合并为一个呢?存在于.NET 1.0和1.1中,是一种泛型类型,直到2.0
NameValueCollection
接受字符串键和字符串值
KeyValuePair
就像一本字典,您可以告诉它键和值的类型
我不明白为什么存在
NameValueCollection
。用字符串类型初始化KeyValuePair
似乎就足够了。我还注意到,NameValueCollection
还有一些方法可用,但是为什么不将这两个类合并为一个呢?存在于.NET 1.0和1.1中,是一种泛型类型,直到2.0才添加到.NET中。所有的类都早于泛型的加入;它包含某些强类型(如果您愿意,可以进行专门化)以便在用户不必从对象转换为字符串时使用。AKeyValuePair
与字典不同。它只是一个包含键和值的元组
NameValueCollection
是相当于IList
的包装(注意NameValueCollection
早于泛型)-像Get(string)
这样的操作是O(n)
的,可以通过索引获取项,每个键映射到一个或多个值(这与字典
不同)
原因如下所述:
此类可用于标题、查询字符串和表单数据
对于NameValueCollection
,具有类似行为的较新的“替换”数据结构是。(但是,它不直接支持与spender notes相同的不可变操作。)
快乐编码。是用于迭代
var字典=新字典
foreach(字典中的var kvp)
{
//kvp是KeyValuePair.kvp.Key是int键,kvp.Value是键的长值
}
是可索引的。A
KeyValuePair
不像字典。它只是一个包含键和值的元组。@pst,字典获取键/值对列表。我看不出有什么不同。@Nickvar 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
}