Как выпрыгнуть из цикла foreach в C#?

Как мне вырваться из 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
}

11 ответов


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;

использовать break; и это выйдет из цикла foreach


вы можете избежать явных циклов, выбрав маршрут LINQ:

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

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


можно использовать break который выскакивает из ближайшего охватывающего цикла, или вы можете просто напрямую return true


Используйте оператор' break'. Я нахожу забавным, что ответ на ваш вопрос буквально в вашем вопросе! Кстати, простой поиск в Google мог бы дать вам ответ.


Как насчет:

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

Это должно сделать трюк, если все, что вы хотите сделать проверьте " ОК " и верните ответ ...


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

либо вернуться прямо из цикла:

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"
}

Это не прямой ответ на ваш вопрос, но есть гораздо более простой способ сделать то, что вы хотите. Если вы используете .NET 3.5 или более позднюю версию, по крайней мере. Она называется перечисли.Содержит

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

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