我有两个班级
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;
}
}
答案 0 :(得分:2)
我的问题对我来说有点不清楚。我假设你有一些对象的集合 A 而 A 有一个集合属性。如果是这样的话:
你的解决方案是最直接的方式所以我会选择它。
你可以使用linq,但它不会真正使这更快或更清楚。类似于SelectMany
的东西,它将许多IEnumerables压缩成一个:
foreach(var x in obj.SelectMany(z=>z.b)) { }
答案 1 :(得分:2)
由于只有一个集合,因此不需要两个循环。由于您的obj
变量不是集合,因此您甚至无法对其进行循环。
只需在对象中显示属性并循环遍历集合:
// print obj.something;
foreach (var x in obj.b) {
// print x.else;
// print x.elseelse;
}
答案 2 :(得分:2)
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);
}
答案 3 :(得分:1)
不,只有一个foreach通过obj.b:
foreach (var z in obj.b)
{
}