首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#遍历NameValueCollection

C#遍历NameValueCollection
EN

Stack Overflow用户
提问于 2011-02-21 20:30:35
回答 8查看 71.3K关注 0票数 77

我有一个NameValueCollection,并且想要遍历值。目前,我正在做这件事,但似乎应该有一种更简洁的方法:

代码语言:javascript
复制
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();

在那里吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-21 21:29:02

您可以使用Linq来扁平化集合,但它仍然是一个foreach循环,但现在更隐式了。

代码语言:javascript
复制
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

票数 107
EN

Stack Overflow用户

发布于 2011-02-21 20:34:54

您可以使用键进行查找,而不是使用两个循环:

代码语言:javascript
复制
foreach (string key in nvc)
{
    Console.WriteLine("{0} {1}", key, nvc[key]);
}
票数 86
EN

Stack Overflow用户

发布于 2012-10-03 21:13:14

这里没有什么新鲜事(@Julian's +1'd by me的答案在功能上是等价的),你们都请继续往前走。

对于这种情况,我有一个过度杀伤力,但可能是相关的一组扩展方法in an answer to a related question,它可以让你做到:

代码语言:javascript
复制
foreach ( KeyValuePair<string,string> item in nvc.AsEnumerable().AsKeyValuePairs() )
    Console.WriteLine("{0} {1}", item.key, item.value);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5065928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档