如何在 .ForEach() 方法中使用 continue 语句

Posted

技术标签:

【中文标题】如何在 .ForEach() 方法中使用 continue 语句【英文标题】:How can I use continue statement in .ForEach() method 【发布时间】:2012-01-10 03:06:03 【问题描述】:

有没有等价于 ForEach 方法中的 continue 语句?

List<string> lst = GetIdList();
lst.ForEach(id =>

     try
     
       var article = GetArticle(id);
       if (article.author.contains("Twain"))
       
         //want to jump out of the foreach now
         //continue; **************this is what i want to do*******

       

       //other code follows
   

编辑: 感谢所有伟大的答案。感谢您澄清 .foreach 不是扩展方法。我使用这种结构来保持编码风格的一致性(不同的程序员在同一个类中使用另一种类似的方法)......感谢提供为什么要避免使用 .foreach 的链接。

【问题讨论】:

如果你想用foraech那么糟糕,用普通的foreach代替 冒着过分强调的风险,使用标准的foreach循环。 重新检查“继续”一词。在循环中,“继续”的意思是“停止处理这个项目并转到下一个项目”。完全退出处理的关键字是“break” 【参考方案1】:

A) ForEach 不是 LINQ,它是 List&lt;T&gt; 上的一个方法。 B) 只需使用 foreach。 C) return 会做到的。

编辑

澄清一下,您所做的是提供一种方法,该方法将为列表中的每个条目调用。 return 只会应用于该成员的方法。列表中的其余成员仍将调用该方法。

【讨论】:

+1,因为它与所选答案的答案相同,但提前 1 分钟。【参考方案2】:

就我个人而言,我只会使用标准的 foreach 循环而不是 List&lt;T&gt;.ForEach

在这种情况下,您可以反转条件(以避免这种情况下的代码)或调用return,因为您的目标是使用continue 语句。但是,如果您想break,这将行不通。话虽这么说,有很多few other reasons to avoid List&lt;T&gt;.ForEach,所以我会考虑将其切换为普通的foreach语句。

【讨论】:

【参考方案3】:

只需反转您的if 条件:

lst.ForEach(id => 
                      var article = GetArticle(id);
                      if (!article.author.contains("Twain"))
                      
                          // other code here
                      
                  );

【讨论】:

【参考方案4】:

您使用的方法是List&lt;T&gt;.ForEach,这是在类上定义的方法,而不是 LINQ 扩展方法。这个问题其实和LINQ无关。

传递给List&lt;T&gt;.ForEach 的委托中的return; 应该在实际的foreach 构造中近似使用continue;

【讨论】:

【参考方案5】:

回答你的问题:

List<string> lst = GetIdList();
lst.ForEach(id =>

    try
    
        var article = GetArticle(id);
        if (article.author.contains("Twain"))
            goto _continue;
    

    //other code follows

    _continue:;

其他答案是正确的,避免使用.ForEach()。也应该避免使用goto,尽管它有时对缩短代码块很有用。

【讨论】:

【参考方案6】:

在 foreach 中继续将循环回到循环顶部到序列中的下一项。如果这就是你想要的,return 应该这样做。如果你想完全退出,你可能想使用像 Any() 这样的实际 LINQ 方法重写它。

【讨论】:

以上是关于如何在 .ForEach() 方法中使用 continue 语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振中使用foreach方法[重复]

node.js:如何在 forEach 循环中使用异步调用实现路由方法?

Dictionary.ContainsKey / Value与检查某个键/值的foreach循环之间的速度是否存在差异

如何在 Postgres 中使用带有多个分位数的 percentile_conts

java - 如何使用 lambda 表达式从 forEach 方法中中断[重复]

如何在控制器传递变量(laravel)中使用刀片进行 foreach