2011-04-08 114 views

回答

19

您應該考慮使用通用的Dictionary,因爲它是強類型的,而Hashtable則不是。試試這個:

NameValueCollection col = new NameValueCollection(); 
col.Add("red", "rouge"); 
col.Add("green", "verde"); 
col.Add("blue", "azul"); 

var dict = col.AllKeys 
       .ToDictionary(k => k, k => col[k]); 

編輯:基於您的評論,得到一個哈希表,你可以仍然使用上述方法,並添加更多的線。你總是可以在一行中完成這項工作,但是2行更具可讀性。

Hashtable hashTable = new Hashtable(dict); 

或者,使用循環將是pre-.NET 3.5做法:

Hashtable hashTable = new Hashtable(); 
foreach (string key in col) 
{ 
    hashTable.Add(key, col[key]); 
} 
+0

問題是,我正在使用一個API,期望一個'Hashtable'所以使用'Dictionary'不是一個選項... – MarioVW 2011-04-08 20:54:26

+0

@MarioVW在這種情況下看到我的更新。 – 2011-04-08 20:58:21

+0

這裏有一個問題。 NameValueCollection允許重複鍵。在這種情況下,所有值都插入到HashTable中的同一個鍵。每個唯一密鑰只有一個條目。例如如果您有兩次針對「rouge」和「verde」值列出的「紅色」鍵,則這兩個值將作爲單個鍵與散列鍵「red」一起列出。 – Priyank 2011-04-08 21:08:29

1

它需要一個以上的線,但它是體面簡單

NameValueCollection nv = new NameValueCollection(); 
Hashtable hashTable = new Hashtable(); 

nv.Add("test", "test"); 

foreach (string key in nv.Keys) 
{ 
    hashTable.Add(key, nv[key]); 
} 

它編譯和執行如預期。

相關問題