2011-04-08 59 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]); 
} 

它编译和执行如预期。