1

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

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

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

3 回答 3

6

您可以使用该Where方法。

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

您的代码现在所做的是获取元素,直到找到与条件不匹配的元素。例如,如果列表的第一个元素与谓词不匹配,您将得到一个空集合。

于 2013-01-09T20:41:28.400 回答
1

Eve 上面的回答是正确的。

我只想指出,如果您以更易读的方式编写代码,您可以通过单步执行代码来轻松解决这个问题。

var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid);
foreach (var course in collectionToIterate)
{
  //...
}

您会立即看到 collectionToIterate 不是您所期望的。您没有“退出整个循环”,您根本没有要迭代的项目。

于 2013-01-09T20:48:32.480 回答
1

您可以Where改用:

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

或者使用if语句检查条件:

foreach (var course in agentNewTraining.AllCoursesTaken) {
  if (course.Valid) {
    ...
  }
}
于 2013-01-09T20:48:41.247 回答