Comment sortir d'une boucle foreach en C #?

125

Comment sortir d'une foreachboucle en C # si l'un des éléments répond à l'exigence?

Par exemple:

foreach(string s in sList){
      if(s.equals("ok")){
       //jump foreach loop and return true
     }
    //no item equals to "ok" then return false
}
Steven Zack
la source
Drôle. En Python, vous feriez simplement return "ok" in sList:- n'y a-t-il pas quelque chose de comparable en C #?
Tim Pietzcker
8
@Tim Pietzcker: Bien sûr que oui, voir la réponse de Spender. En fait, après s'être habitué à Linq, beaucoup de code impératif ressemble à des dessins rupestres.
R0MANARMY

Réponses:

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

return false;

Alternativement, si vous devez faire d'autres choses après avoir trouvé l'élément:

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

// do stuff

return found;
mbillard
la source
6
Je suggérerais que le deuxième exemple serait mieux réécrit enbool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR
83

Utilisez break;et cela quittera la boucle foreach

Francis Gilbert
la source
55

Vous pouvez éviter les boucles explicites en empruntant la route LINQ:

sList.Any(s => s.Equals("ok"))
dépensier
la source
23
ou simplement utiliser Contains("ok").
Graham Clark
7
@Graham Clark: Containssuppose que vous itérez sur un fichier ICollection<T>. Anyfonctionnerait sur tout ce qui est de type IEnumerable<T>, et dans ce cas, la question n'indique pas explicitement le type de collection sur laquelle elle itère ( Listc'est une estimation assez juste).
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.
}

Devrait faire l'affaire. L'instruction break terminera simplement l'exécution de la boucle, tandis que l'instruction return terminera évidemment toute la fonction. À en juger par votre question, vous voudrez peut-être utiliser le retour vrai; déclaration.

Cody
la source
7

Vous pouvez utiliser breakquels sauts hors de la boucle englobante la plus proche, ou vous pouvez simplementreturn true

vrxacs
la source
5

Utilisez l'instruction «break». Je trouve drôle que la réponse à votre question soit littéralement dans votre question! Au fait, une simple recherche sur Google aurait pu vous donner la réponse.

dynamichael
la source
3

que diriez-vous:

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

Cela devrait faire l'affaire si tout ce que vous voulez faire est de vérifier un "ok" et de renvoyer la réponse ...

Dan Olesen
la source
2

Ce n'est pas une réponse directe à votre question, mais il existe un moyen beaucoup plus simple de faire ce que vous voulez. Si vous utilisez .NET 3.5 ou version ultérieure, au moins. Il s'appelle Enumerable.

bool found = sList.Contains("ok");
Can Gencer
la source
1
foreach(string s in sList)
{
    if(s.equals("ok"))
    {
             return true;
    }
}
return false;
harryovers
la source
1

Soit vous revenez tout droit hors de la boucle:

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

Cependant, dans votre cas, il pourrait être préférable de faire quelque chose comme ceci:

if(sList.Contains("ok"))
{
    // at least one element is "ok"
}
else
{
   // no elements are "ok"
}
Graham Clark
la source
-2
var ind=0;
foreach(string s in sList){
    if(s.equals("ok")){
        return true;
    }
    ind++;
}
if (ind==sList.length){
    return false;
}
johnny craig
la source
La $syntaxe C # n'est pas vraiment valide.
R0MANARMY
probablement pas, je suis un gars javascript / php. mais il y a assez de code ici pour appliquer une solution de travail ... j'ai supprimé le $ et ajouté var .. probablement toujours pas c +
johnny craig
varest en fait un mot clé C # parfaitement valide, donc vous êtes bon
R0MANARMY