Como pulo de um loop foreach em c #?


124

Como interrompo um foreachloop em C # se um dos elementos atende ao requisito?

Por exemplo:

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

Engraçado. Em Python, você simplesmente faria return "ok" in sList:- não há algo comparável em c #?
Tim Pietzcker

8
@ Tim Pietzcker: Claro que sim, veja a resposta do gastador. De fato, depois de se acostumar com o Linq, muitos códigos imperativos parecem desenhos de cavernas.
R0MANARMY

Respostas:


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

return false;

Como alternativa, se você precisar fazer outras coisas depois de encontrar o item:

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
Eu sugeriria que o segundo exemplo seria melhor reescrito parabool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

Você pode evitar loops explícitos seguindo a rota LINQ:

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

23
ou apenas use Contains("ok").
Graham Clark

7
@ Graham Clark: Containsassume que você está repetindo uma ICollection<T>. Anyfuncionaria em qualquer coisa que fosse do tipo IEnumerable<T>e, nesse caso, a pergunta não indica explicitamente em que tipo de coleção está sendo repetida (a Listé um palpite bastante justo).
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.
}

Deve fazer o truque. A instrução break acabará a execução do loop, enquanto a instrução return obviamente encerrará toda a função. A julgar pela sua pergunta, você pode querer usar o retorno true; declaração.


7

Você pode usar breakquais saltos do loop mais próximo, ou apenas diretamentereturn true


5

Use a instrução 'break'. Acho engraçado que a resposta à sua pergunta esteja literalmente na sua pergunta! A propósito, uma simples pesquisa no Google poderia ter lhe dado a resposta.


3

e quanto a:

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

Isso deve funcionar, se tudo o que você quer fazer é procurar um "ok" e retornar a resposta ...


2

Não é uma resposta direta à sua pergunta, mas existe uma maneira muito mais fácil de fazer o que você deseja. Se você estiver usando o .NET 3.5 ou posterior, pelo menos. É chamado Enumerable.Contains

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

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

1

Retorne direto do loop:

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

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

Ou use 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
}

No entanto, no seu caso, pode ser melhor fazer algo assim:

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

Certamente $não é uma sintaxe C # válida.
R0MANARMY

provavelmente não, sou um cara de javascript / php. mas não há código suficiente aqui para aplicar uma solução de trabalho ... i removido do var $ e acrescentou .. provavelmente ainda não c +
johnny Craig

na verdade, varé um C # palavra-chave perfeitamente válido, então você é bom
R0MANARMY
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.