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


124

foreach如果其中一个元素满足要求,如何在C#中打破循环?

例如:

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

滑稽。在Python中,您只需做return "ok" in sList:-在C#中没有可比的东西吗?
蒂姆·皮茨克

8
@Tim Pietzcker:当然有,请参阅支出者的答案。实际上,在习惯了Linq之后,许多命令式代码看起来像是洞穴图。
R0MANARMY 2011年

Answers:


220
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;

6
我建议的第二个例子会更好重写bool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

您可以通过采用LINQ路由来避免显式循环:

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

23
或只是使用Contains("ok")
格雷厄姆·克拉克

7
@Graham Clark:Contains假设您正在遍历ICollection<T>Any可以在type的任何对象上工作IEnumerable<T>,在这种情况下,问题没有明确指出要迭代的List是哪种类型的集合(尽管这是一个相当公平的猜测)。
R0MANARMY

32
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; 声明。


7

您可以使用break哪一个跳出最近的封闭循环,也可以直接return true


5

使用“ break”语句。我很幽默,您的问题的答案就在您的问题中!顺便说一句,简单的Google搜索可以为您提供答案。


3

怎么样:

return(sList.Contains("ok"));

如果您只想检查“确定”并返回答案,那应该可以解决问题。


2

这不是您问题的直接答案,但是有一种更轻松的方法来完成您想要的事情。如果至少使用的是.NET 3.5或更高版本。它被称为Enumerable。

bool found = sList.Contains("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"
}

-2
var ind=0;
foreach(string s in sList){
    if(s.equals("ok")){
        return true;
    }
    ind++;
}
if (ind==sList.length){
    return false;
}

肯定$不是有效的C#语法。
R0MANARMY 2011年

可能不是,我是一个javascript / php家伙。但是这里有足够的代码来应用有效的解决方案...我删除了$并添加了var ..可能仍然不是c +
johnny craig

实际上var是一个完全有效的C#关键字,所以您很好
R0MANARMY 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.