我有一个foreach循环,只有在'Valid'属性设置为true时才需要迭代。不幸的是,如果列表中第一项的'Valid'设置为false,它将退出整个循环。
有没有人知道在foreach循环中使用条件的最佳方法?以下是我现在所拥有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
答案 0 :(得分:6)
您可以使用Where
方法。
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
您的代码现在所做的是获取元素,直到找到与条件不匹配的元素。例如,如果列表的第一个元素与谓词不匹配,则会得到一个空集合。
答案 1 :(得分:1)
我想指出的是,如果您以更易读的方式编写代码,您可以通过单步执行代码来轻松解决此问题。
var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid);
foreach (var course in collectionToIterate)
{
//...
}
你会立刻看到collectionToIterate不是你所期望的。你没有“退出整个循环”,你根本没有任何项目可以迭代。
答案 2 :(得分:1)
您可以改为使用Where
:
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
或者使用if
声明检查条件:
foreach (var course in agentNewTraining.AllCoursesTaken) {
if (course.Valid) {
...
}
}