Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将NameValueCollection转换为哈希表_C#_.net_.net 3.5 - Fatal编程技术网

C# 如何将NameValueCollection转换为哈希表

C# 如何将NameValueCollection转换为哈希表,c#,.net,.net-3.5,C#,.net,.net 3.5,我有一个NameValueCollection对象,我需要将其转换为Hashtable对象,最好是在一行代码中。如何实现这一点?你应该考虑使用泛型,因为它是强类型的,而A不是。试试这个: NameValueCollection col = new NameValueCollection(); col.Add("red", "rouge"); col.Add("green", "verde"); col.Add("blue", "azul"); var dict = col.AllKeys

我有一个
NameValueCollection
对象,我需要将其转换为
Hashtable
对象,最好是在一行代码中。如何实现这一点?

你应该考虑使用泛型,因为它是强类型的,而A不是。试试这个:

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]);
编辑:根据您的评论,要获得哈希表,您仍然可以使用上述方法并添加一行。您可以在一行中完成此操作,但两行更具可读性

Hashtable hashTable = new Hashtable(dict);
或者,使用循环的.NET 3.5之前的方法是:

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

它需要不止一行,但相当简单

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

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

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

它按预期编译和执行。

问题是我使用的API需要一个
哈希表
,因此使用
字典
不是一个选项……这里有一个陷阱。NameValueCollection允许重复键。在这种情况下,将为哈希表中的同一个键插入所有值。每个唯一密钥只有一个条目。e、 g.如果“红色”键在“胭脂”和“绿色”值之间列出了两次,那么这两个值将作为一个键在哈希键“红色”上列出。@Priyank说得对!根据OP的需要,需要进行一些后处理以应用任何特殊处理。