我有一个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();在那里吗?
发布于 2011-02-21 21:29:02
您可以使用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);第一行将嵌套集合转换为具有属性key和value的匿名对象的(非嵌套)集合。
它的扁平化方式是,它现在是一个映射键->值,而不是键->值集合。示例数据:
之前:
测试->值,
Test2 -> Val1,Val1,Val2,
Test3 -> Val1,
Test4 -> Val4
之后:
测试->值,
Test2 -> Val1,
Test2 -> Val1,
Test2 -> Val2,
Test3 -> Val1,
Test4 -> Val4
发布于 2011-02-21 20:34:54
您可以使用键进行查找,而不是使用两个循环:
foreach (string key in nvc)
{
Console.WriteLine("{0} {1}", key, nvc[key]);
}发布于 2012-10-03 21:13:14
这里没有什么新鲜事(@Julian's +1'd by me的答案在功能上是等价的),你们都请继续往前走。
对于这种情况,我有一个过度杀伤力,但可能是相关的一组扩展方法in an answer to a related question,它可以让你做到:
foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() )
Console.WriteLine("{0} {1}", item.key, item.value);https://stackoverflow.com/questions/5065928
复制相似问题