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

时间:2011-11-30 21:49:19

标签: c# .net linq lambda anonymous-methods

是否有与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的链接。

6 个答案:

答案 0 :(得分:51)

A)ForEach不是LINQ,它是List<T>上的一种方法 B)只需使用foreach C)return会这样做。

修改

只是为了澄清,你正在做的是为列表中的每个条目提供一个方法。 return将仅适用于该成员的方法。列表中的其余成员仍将调用该方法。

答案 1 :(得分:18)

就个人而言,我只使用标准的foreach循环而不是List<T>.ForEach

在这种情况下,您可以反转条件(以避免在这种情况下的代码)或调用return,因为您的目标是使用continue语句。但是,如果您想要break,这将无效。话虽如此,有很多few other reasons to avoid List<T>.ForEach,所以我会考虑将其转换为正常的foreach语句。

答案 2 :(得分:10)

只需颠倒您的if条件:

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

答案 3 :(得分:3)

您使用的方法是List<T>.ForEach,这是在类上定义的方法,而不是LINQ扩展方法。这个问题实际上与LINQ无关。

传递给return;的委托中的

List<T>.ForEach应使用实际continue;构造中的foreach进行近似。

答案 4 :(得分:2)

回答你的问题:

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,尽管它有时可用于快捷代码块。

答案 5 :(得分:1)

继续在foreach中循环回到循环顶部到序列中的下一个项目。如果这就是你想要的,那么应该回归。如果要完全退出,可能需要使用实际的LINQ方法(如Any()。

)重写它