【问题标题】: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) {
            ...
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2021-01-04
          • 1970-01-01
          • 2020-06-05
          • 2013-03-21
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          • 1970-01-01
          • 2022-01-03
          相关资源
          最近更新 更多