2011-05-27 40 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是可轉位。