Pau*_*els 71 c# collections namevaluecollection
我有一个NameValueCollection,并希望迭代值.目前,我正在这样做,但似乎应该有一个更简洁的方法来做到这一点:
NameValueCollection nvc = new NameValueCollection();
nvc.Add("Test", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val2");
nvc.Add("Test3", "Val1");
nvc.Add("Test4", "Val4");
foreach (string s in nvc)
foreach (string v in nvc.GetValues(s))
Console.WriteLine("{0} {1}", s, v);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
在那儿?
Jul*_*ian 96
您可以使用Linq来展平集合,但它仍然是一个foreach循环,但现在更隐含.
var items = nvc.AllKeys.SelectMany(nvc.GetValues, (k, v) => new {key = k, value = v});
foreach (var item in items)
Console.WriteLine("{0} {1}", item.key, item.value);
Run Code Online (Sandbox Code Playgroud)
第一行将嵌套集合转换为具有属性键和值的匿名对象的(非嵌套)集合.
它现在是一个映射键 - >值而不是键 - >值的集合.示例数据:
之前:
测试 - > [Val],
Test2 - > [Val1,Val1,Val2],
测试3 - > [Val1],
Test4 - > [Val4]
后:
测试 - > Val,
Test2 - > Val1,
Test2 - > Val1,
Test2 - > Val2,
Test3 - > Val1,
Test4 - > Val4
Fre*_*örk 78
您可以使用该键进行查找,而不是使用两个循环:
foreach (string key in nvc)
{
Console.WriteLine("{0} {1}", key, nvc[key]);
}
Run Code Online (Sandbox Code Playgroud)