KeyValuePair vs. NameValueCollection
本文关键字:NameValueCollection vs KeyValuePair | 更新日期: 2023-09-27 17:57:51
还有其他问题,如KeyValuePair与IDictionary,但我觉得这一个略有不同。
NameValueCollection
采用字符串键和字符串值。
KeyValuePair
就像一本字典,你可以告诉它键和值的类型
我不明白NameValueCollection
为什么存在。用字符串类型初始化KeyValuePair
似乎就足够了。我还注意到NameValueCollection
还有一些可用的方法,但为什么不将两个类合并为一个呢?
KeyValuePair
不像字典。它只是一个包含键和值的元组。
NameValueCollection
是相当于IList<KeyValuePair<string,IList<string>>>
的包装器(请注意,NameValueCollection
早于泛型)-像Get(string)
这样的操作是O(n)
,可以通过索引提取项,每个Key映射到一个或多个值(这与Dictionary<string,string>
不同)。
NameValueCollection文档中对此进行了解释:
此类可用于标题、查询字符串和表单数据。
NameValueCollection
的较新的
Lookup<string,string>
。(然而,它并不直接支持与spender注释中不可变的操作相同的操作。)
快乐的编码。
NameValueCollection存在于.NET 1.0和1.1中,KeyValuePair是一种泛型类型,直到2.0才添加到.NET中。System.Collections.Specialized All中的所有类都早于泛型的添加;它包含某些强类型(如果您愿意的话,可以专门化),当用户不必从对象转换为字符串时,您可以使用这些强类型。
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是可索引的。