我有两节课
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,还是有更好的方法?
foreach (var z in obj)
{
// print z.something;
foreach (var x in z.b)
{
// print x.elseelse;
}
}发布于 2010-04-05 21:01:28
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);
}或
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);
}或者投影字符串:
var qry = from z in obj
from x in z.b
select z.zomething + ", " + x.elseelse;
foreach (string s in qry)
{
Console.WriteLine(s);
}发布于 2010-04-05 20:00:28
你的问题对我来说有点不清楚。我假设你有一个对象A的集合,A有一个集合属性。如果是这样的话:
您的解决方案是最直接的方式,所以我会采用这种方式。
您可以使用linq,但它不会真正使这一切变得更快或更清晰。类似于SelectMany的东西,它将多个IEnumerables扁平化为一个:
foreach(var x in obj.SelectMany(z=>z.b)) { }发布于 2010-04-05 20:46:20
因为只有一个集合,所以不需要两个循环。因为您的obj变量不是一个集合,所以您甚至不能对其进行循环。
只需显示对象中的属性并遍历集合即可:
// print obj.something;
foreach (var x in obj.b) {
// print x.else;
// print x.elseelse;
} https://stackoverflow.com/questions/2578213
复制相似问题