【问题标题】:foreach loop with conditions on a List object's attribute带有 List 对象属性条件的 foreach 循环
【发布时间】:2012-12-24 03:21:23
【问题描述】:
我有一个 foreach 循环,只有在 'Valid' 属性设置为 true 时才需要迭代。不幸的是,如果列表中第一项的“有效”设置为 false,它将退出整个循环。
有谁知道在 foreach 循环中使用条件的最佳方法?以下是我现在所拥有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
【问题讨论】:
标签:
c#
linq
entity-framework
foreach
conditional-statements
【解决方案1】:
您可以使用Where 方法。
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
您的代码现在所做的是获取元素,直到找到与条件不匹配的元素。例如,如果列表的第一个元素与谓词不匹配,您将得到一个空集合。
【解决方案2】:
上面夏娃的回答是正确的。
我只想指出,如果您以更易读的方式编写代码,您可以通过单步执行代码来轻松解决这个问题。
var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid);
foreach (var course in collectionToIterate)
{
//...
}
您会立即看到 collectionToIterate 不是您所期望的。您没有“退出整个循环”,您根本没有要迭代的项目。
【解决方案3】:
您可以改用Where:
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
或者使用if 语句检查条件:
foreach (var course in agentNewTraining.AllCoursesTaken) {
if (course.Valid) {
...
}
}