在List对象's属性上带有条件的foreach循环

本文关键字:有条件 循环 foreach 属性 对象 List | 更新日期: 2023-09-27 17:51:05

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

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

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

在List对象's属性上带有条件的foreach循环

您可以使用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) {
    ...
  }
}