2011-05-27 99 views
10

还有其他问题,例如KeyValuePair与IDictionary,但我觉得这个稍有不同。KeyValuePair与NameValueCollection

NameValueCollection取一个字符串键和字符串值。

KeyValuePair就像字典,你告诉它什么类型的关键和价值是。

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

+10

“KeyValuePair”不像字典。它只是一个包含Key和Value的Tuple。 – 2011-05-27 01:32:44

+0

@pst,一个字典需要一个键/值对列表。我没有看到有什么不同。 – 2011-05-27 01:39:06

+0

@Nick'var kvp = new KeyValuePair (“Hello”,“World!”)' - [KeyValuePair ](http://msdn.microsoft.com/zh-cn/library/5tbh8a42。 aspx) – 2011-05-27 01:44:18

回答

13

A KeyValuePair不喜欢字典。它只是一个包含Key和Value的Tuple。

NameValueCollection是在什么一个IList<KeyValuePair<string,IList<string>>>(注意NameValueCollection早于仿制药)的包装 - 就像Get(string)操作O(n)和物品可以通过索引和每个键映射中获取到一个以上值(这不同于a Dictionary<string,string>)。

其原因在the NameValueCollection documentation说明:

该类可用于报头,查询字符串和表单数据。

较新 “替代”数据结构与一些类似行为NameValueCollectionLookup<string,string>。 (但是,它并不直接支持与不变的笔记一样的操作。)

快乐编码。

+1

在这种情况下查找的主要问题是它不可变,不像NaveValueCollection可以添加到NaveValueCollection。因此,这不是真正的“替代品”,但具有类似的行为。 – spender 2011-05-27 02:07:45

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是可转位。