如何在C#中跳出foreach循环?

177

如果在 C# 中,当遍历foreach时,某个元素满足条件,该如何跳出循环?

例如:

foreach(string s in sList){
      if(s.equals("ok")){
       //jump foreach loop and return true
     }
    //no item equals to "ok" then return false
}

2
有趣。在Python中,你只需要这样做:return "ok" in sList: - 那么在C#中有没有类似的东西呢? - Tim Pietzcker
11
当然有,看看spender的答案就知道了。事实上,在适应Linq之后,很多命令式代码看起来就像洞穴壁画一样。 - Roman
12个回答

313
foreach (string s in sList)
{
    if (s.equals("ok"))
        return true;
}

return false;

如果您需要在找到该项后执行其他操作:

bool found = false;
foreach (string s in sList)
{
    if (s.equals("ok"))
    {
        found = true;
        break; // get out of the loop
    }
}

// do stuff

return found;

8
我建议将第二个示例重写为 bool found = callFunctionInFirstCodeSnipper(list); // do stuff - ICR

117

使用break;语句,可以退出foreach循环


61

你可以通过使用LINQ来避免显式循环:

sList.Any(s => s.Equals("ok"))

24
或者只需使用Contains("ok") - Graham Clark
12
“Contains”假设你正在迭代一个“ICollection <T>”。而“Any”可以适用于任何类型的“IEnumerable <T>”,在这种情况下,问题没有明确指出正在迭代哪种类型的集合(但“List”是一个相当好的猜测)。 - Roman

37
foreach (var item in listOfItems) {
  if (condition_is_met)
    // Any processing you may need to complete here...
    break; // return true; also works if you're looking to
           // completely exit this function.
}

这应该就能搞定了。break语句只会结束循环的执行,而return语句会终止整个函数的执行。根据你的问题,你可能想使用return true;语句。


10
使用“break”语句来跳出循环。

7
你可以使用 break 来跳出最近的循环,或者直接使用 return true

3
如何呢?
return(sList.Contains("ok"));

如果你只想检查是否为“ok”并返回答案,那么这应该足够了...


1
foreach(string s in sList)
{
    if(s.equals("ok"))
    {
             return true;
    }
}
return false;

1

可以直接从循环中返回:

foreach(string s in sList){
   if(s.equals("ok")){
      return true;
   }
}

// if you haven't returned by now, no items are "ok"
return false;

或者使用 break

bool isOk = false;
foreach(string s in sList){
   if(s.equals("ok")){
      isOk = true;
      break; // jump out of the loop
   }
}

if(isOk)
{
    // do something
}

然而,在你的情况下,最好这样做:

if(sList.Contains("ok"))
{
    // at least one element is "ok"
}
else
{
   // no elements are "ok"
}

1

这不是对你问题的直接回答,但有一个更简单的方法可以实现你想要的功能。如果你使用的是 .NET 3.5 或更高版本,那么就可以使用 Enumerable.Contains 方法。

bool found = sList.Contains("ok");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接