Как да конвертирате NameValueCollection в Hashtable

Имам NameValueCollection обект и трябва да го конвертирам в Hashtable обект, за предпочитане в един ред код. Как мога да постигна това?


person MarioVW    schedule 08.04.2011    source източник


Отговори (2)


Трябва да обмислите използването на общ 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]);

РЕДАКТИРАНЕ: Въз основа на вашия коментар, за да получите HashTable, все още можете да използвате горния подход и да добавите още един ред. Винаги можете да накарате това да работи в един ред, но 2 реда са по-четими.

Hashtable hashTable = new Hashtable(dict);

Като алтернатива подходът преди .NET 3.5, използващ цикъл, би бил:

Hashtable hashTable = new Hashtable();
foreach (string key in col)
{
    hashTable.Add(key, col[key]);
}
person Ahmad Mageed    schedule 08.04.2011
comment
проблемът е, че използвам API, който очаква Hashtable, така че използването на Dictionary не е опция... - person MarioVW; 09.04.2011
comment
тук има уловка. NameValueCollection позволява дублиране на ключове. В този случай всички стойности се вмъкват за един и същ ключ в HashTable. има само един запис за уникален ключ. напр. ако имате червен ключ, изброен два пъти срещу стойностите на червеното и зеленото, и двете стойности ще бъдат изброени срещу хеш ключа червено като един ключ. - person Priyank; 09.04.2011
comment
@Priyank добра гледна точка! Ще трябва да се извърши някаква последваща обработка, за да се приложи някаква специална обработка в зависимост от нуждите на OP. - person Ahmad Mageed; 09.04.2011

Отнема повече от един ред, но е прилично просто

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

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

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

Той се компилира и изпълнява според очакванията.

person Jeff LaFay    schedule 08.04.2011