web-dev-qa-db-fra.com

Comment sauter d'une boucle foreach en C #?

Comment sortir d'une boucle foreach en C # si l'un des éléments satisfait à 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
}
114
Steven Zack
foreach (string s in sList)
{
    if (s.equals("ok"))
        return true;
}

return false;

Si vous avez besoin de faire autre chose après avoir trouvé l'élément, vous pouvez également:

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

// do stuff

return found;
198
mbillard

Utilisez break; et ceci sortira de la boucle foreach

77
Francis Gilbert

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

sList.Any(s => s.Equals("ok"))
55
spender
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 mettra simplement fin à l'exécution de la boucle, tandis que l'instruction return mettra évidemment fin à la fonction entière. À en juger par votre question, vous voudrez peut-être utiliser le retour vrai; déclaration.

28
Cody

Vous pouvez utiliser break qui saute hors de la boucle englobante la plus proche, ou vous pouvez simplement directement return true

7
vrxacs

Utilisez l'instruction 'break'. Je trouve amusant que la réponse à votre question se trouve littéralement dans votre question! À propos, une simple recherche sur Google aurait pu vous donner la réponse.

4
dynamichael

que diriez-vous:

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

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

3
Dan Olesen

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

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

Soit revenir tout droit sorti 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"
}
1
Graham Clark