我有一个 foreach 循环,仅当“有效”属性设置为 true 时才需要迭代。不幸的是,如果列表中第一项的“有效”设置为 false,它将退出整个循环。
有谁知道在 foreach 循环中使用条件的最佳方法?以下是我现在所拥有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
我有一个 foreach 循环,仅当“有效”属性设置为 true 时才需要迭代。不幸的是,如果列表中第一项的“有效”设置为 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) {
...
}
}