Имам NameValueCollection
обект и трябва да го конвертирам в Hashtable
обект, за предпочитане в един ред код. Как мога да постигна това?
Как да конвертирате NameValueCollection в Hashtable
Отговори (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
проблемът е, че използвам API, който очаква
Hashtable
, така че използването на Dictionary
не е опция...
- person MarioVW; 09.04.2011
тук има уловка. NameValueCollection позволява дублиране на ключове. В този случай всички стойности се вмъкват за един и същ ключ в HashTable. има само един запис за уникален ключ. напр. ако имате червен ключ, изброен два пъти срещу стойностите на червеното и зеленото, и двете стойности ще бъдат изброени срещу хеш ключа червено като един ключ.
- person Priyank; 09.04.2011
@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