基本上我有一个传递自定义对象列表的方法。我正在使用C#。其中每个都包含一个名称和另一个自定义对象列表,我将其称为这些子对象。每个都有一个名称和一个字符串列表。我需要循环遍历所有字符串,但要跟踪父对象和主题的名称以进行错误记录。除了嵌套foreach之外,还有更清洁,更好的方法吗?
foreach (var obj in listOfObjects)
{
foreach (var subObj in obj.subObjects)
{
foreach (var aString in subObj.strings)
{
if (some condition applies)
{
//log error that includes obj, subObj, and subSubObj names, and aString.
}
}
}
}
答案 0 :(得分:2)
您可以编写LINQ查询以获取所有错误情况
var errors = from obj in listOfObjects
from subObj in obj.subObjects
from aString in subObj.strings
where /* your condition */
select new { obj, subObj, aString };
而不是仅仅迭代它们:
foreach(var errorCase in errors)
{
// log your error
}
或获得第一个:
var error = errors.FirstOrDefault();
取决于您的需求。
答案 1 :(得分:0)
添加到MarcinJuraszek的答案,如果linq对象是首选......
var errors = listOfObjects
.SelectMany(obj => obj.subObjects
.SelectMany(subObj => subObj.strings
.Where(r => /* your condition */)
.Select(aString => new { obj, subObj, aString })));
但是你发布的代码没有错。很明显,你很快就会更容易理解。