我有一个foreach循环,只有当'Valid'属性设置为true时才需要迭代。不幸的是,如果列表中的第一项'Valid'设置为false,则退出整个循环。
有人知道在foreach循环中使用条件的最佳方法吗?下面是我现在所拥有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
您可以使用Where
方法。
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
你的代码现在所做的是取元素,直到找到一个不符合条件的。例如,如果列表的第一个元素与谓词不匹配,则会得到一个空集合。
Eve的答案是正确的。
我只是想指出,如果你以一种更易读的方式编写代码,你可以很容易地通过分步执行代码来解决这个问题。
var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid);
foreach (var course in collectionToIterate)
{
//...
}
你会马上看到collectionToIterate不是你所期望的。你并没有"退出整个循环",你只是没有需要迭代的项目。
您可以使用Where
代替:
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
或者使用if
语句检查条件:
foreach (var course in agentNewTraining.AllCoursesTaken) {
if (course.Valid) {
...
}
}