首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环遍历集合

循环遍历集合
EN

Stack Overflow用户
提问于 2010-04-05 19:57:50
回答 4查看 217关注 0票数 3

我有两节课

代码语言:javascript
运行
复制
class A
{
    public string something { get; set; }
    public IList<B> b= new List<B>();
}

class B
{
    public string else { get; set; }
    public string elseelse { get; set; }
}

我已经填充了一个名为obj的A类对象。如何遍历此对象并打印值。我必须使用两个foreach,还是有更好的方法?

代码语言:javascript
运行
复制
 foreach (var z  in obj)
            {
                // print z.something;
                foreach (var x in z.b)
                {
                    // print x.elseelse;
                }
            }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-05 21:01:28

代码语言:javascript
运行
复制
var qry = from z in obj
          from x in z.b
          select new { z, x };
foreach (var pair in qry)
{
     Console.WriteLine("{0}, {1}", pair.z.something, pair.x.elseelse);
}

代码语言:javascript
运行
复制
var qry = from z in obj
          from x in z.b
          select new { z.zomething, x.elseelse };
foreach (var item in qry)
{
     Console.WriteLine("{0}, {1}", item.something, item.elseelse);
}

或者投影字符串:

代码语言:javascript
运行
复制
var qry = from z in obj
          from x in z.b
          select z.zomething + ", " + x.elseelse;
foreach (string s in qry)
{
     Console.WriteLine(s);
}
票数 2
EN

Stack Overflow用户

发布于 2010-04-05 20:00:28

你的问题对我来说有点不清楚。我假设你有一个对象A的集合,A有一个集合属性。如果是这样的话:

您的解决方案是最直接的方式,所以我会采用这种方式。

您可以使用linq,但它不会真正使这一切变得更快或更清晰。类似于SelectMany的东西,它将多个IEnumerables扁平化为一个:

代码语言:javascript
运行
复制
foreach(var x in obj.SelectMany(z=>z.b)) { }
票数 2
EN

Stack Overflow用户

发布于 2010-04-05 20:46:20

因为只有一个集合,所以不需要两个循环。因为您的obj变量不是一个集合,所以您甚至不能对其进行循环。

只需显示对象中的属性并遍历集合即可:

代码语言:javascript
运行
复制
// print obj.something; 
foreach (var x in obj.b) {
  // print x.else; 
  // print x.elseelse; 
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2578213

复制
相关文章

相似问题

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