Как преобразовать NameValueCollection в Hashtable

У меня есть объект NameValueCollection, и мне нужно преобразовать его в объект Hashtable, предпочтительно в одной строке кода. Как я могу достичь этого?

Ответ 1

Вместо этого вы должны использовать общий 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]);

EDIT:. На основе вашего комментария, чтобы получить HashTable, вы все равно можете использовать вышеупомянутый подход и добавить еще одну строку. Вы всегда можете сделать эту работу в одной строке, но 2 строки более читабельны.

Hashtable hashTable = new Hashtable(dict);

Альтернативно, подход pre-.NET 3.5 с использованием цикла:

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

Ответ 2

Требуется несколько строк, но это довольно просто

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

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

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

Он компилируется и выполняется, как ожидалось.