foreach循环,具有List对象属性的条件

时间:2013-01-09 20:40:42

标签: c# linq entity-framework foreach conditional-statements

我有一个foreach循环,只有在'Valid'属性设置为true时才需要迭代。不幸的是,如果列表中第一项的'Valid'设置为false,它将退出整个循环。

有没有人知道在foreach循环中使用条件的最佳方法?以下是我现在所拥有的。

foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))

3 个答案:

答案 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) {
    ...
  }
}