我有一个NameValueCollection
对象,我需要将它转换为Hashtable
对象,最好在一行代码中。我怎样才能做到这一点?如何将NameValueCollection转换为Hashtable
11
A
回答
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]);
}
1
它需要一个以上的线,但它是体面简单
NameValueCollection nv = new NameValueCollection();
Hashtable hashTable = new Hashtable();
nv.Add("test", "test");
foreach (string key in nv.Keys)
{
hashTable.Add(key, nv[key]);
}
它编译和执行如预期。
问题是,我正在使用一个API,期望一个'Hashtable'所以使用'Dictionary'不是一个选项... – MarioVW 2011-04-08 20:54:26
@MarioVW在这种情况下看到我的更新。 – 2011-04-08 20:58:21
这里有一个问题。 NameValueCollection允许重复键。在这种情况下,所有值都插入到HashTable中的同一个键。每个唯一密钥只有一个条目。例如如果您有两次针对“rouge”和“verde”值列出的“红色”键,则这两个值将作为单个键与散列键“red”一起列出。 – Priyank 2011-04-08 21:08:29