2012-06-19 6 views
3

Comment puis-je faire de manière si la déclaration « si » est vrai, pour passer le code ci-dessous la boucle foreach et continuer avec le reste du programmeC# - boucle foreach instruction if

void() 
{ 
    foreach() 
    { 
     if() 
     { 

     } 
    } 

    //code I want to skip if "if" statement is true 

} 
+0

continue mot clé vient à votre secours. vous pouvez utiliser 'Break' si vous voulez sortir de la boucle for. – AlwaysAProgrammer

+2

Trop de votre question est ambiguë. Le commentaire de Yogendra pourrait être la réponse en fonction de ce que vous voulez dire – McAden

+0

vous devez déclarer bool dans if bloc de déclaration et l'utiliser dans la zone où vous voulez ignorer –

Répondre

3

Il n'y a pas moyen de faire directement ce que vous voulez (sans « goto » étiquettes - périrez la pensée), mais vous pouvez utiliser le mot-clé « break », et définir une variable que vous pouvez consulter plus tard.

void() 
{ 
    var testWasTrue = false; 
    foreach() 
    { 
     if() 
     { 
      testWasTrue = true; 
      break; // break out of the "foreach" 
     } 
    } 

    if(!testWasTrue) { 
     //code I want to skip if "if" statement is true 
    } 

} 
+0

Ne vous embêtez pas avec le booléen. Faites le travail et puis cassez/retournez. Si c'est un bloc de code significatif, on peut facilement dire que cela devrait être une fonction de toute façon. Voir mon exemple ci-dessous. – dodexahedron

+0

Sauf que c'est très différent de votre réponse. – McAden

+2

La rupture est hors de propos puisque nous ne connaissons pas sa logique. Il pourrait y avoir du code à l'intérieur de la boucle qui doit être exécuté pour tous les éléments. – Jon

0
void() 
{ 
    bool skip = false; 
    foreach() 
    { 
     if() 
     { 
      skip = true; 
     } 
    } 

    if(!skip) 
    { 
     //code I want to skip if "if" statement is true 
    } 
} 
1

Le mot clé 'break' sortira de la boucle.

foreach (someClass a in someArray) 
{ 
    if(a.someProperty) // bool property 
    { 
    //Stuff to do if that condition is true 
    doSomethingElse(); 
    //Calling the break keyword will stop the loop and jump immediately outside of it 
    break; 
    } 
    //Other code to run for each iteration of the loop 
} 

//Here is where execution will pick up either after break is called or after the loop finishes 
0

Seule façon que je sais comment est un drapeau bool.

void() 
{ 
    bool x = false; 
    foreach() 
    { 
    if() 
    { 
     x = true; 
     break; 
    } 
    } 
    if(!x) 
    { 
    //Code to skip if "if" statement is true. 
    } 
} 

Pas très élégant, mais facile. Edit: battre de 12 secondes :)

+0

Il n'y a pas besoin d'un booléen. Faites le travail et ensuite cassez. – dodexahedron

1
void() 
{ 
    bool process = true; 
    foreach() 
    { 
      if() 
      { 
       process = false; 
       break; 
      } 
    } 

    if (process) 
    { 
     //code I want to skip if "if" statement is true 
    } 

} 
1

Comme mentionné dans mon commentaire vous pouvez le faire via la variable bool supplémentaire.

void() 
    { 
     bool positiveResult; // by default it gets false value 
     foreach() 
     { 
      if() 
      { 
       positiveResult = true; 
       // you may use "break" to skip the loop 
       break; 
      } 
     } 

     if(!positiveResult ) 
     { 
      //code I want to skip if "if" statement is true 
     } 

    } 
+0

Pas besoin de parcourir toute la collection. Pause ou retour dès que possible. Aussi, nix le booléen. Pas besoin de ça du tout. – dodexahedron

3

Je sais que cela a déjà été répondu, mais je pensais que je jetterais dans mes 2 cents puisque personne ne considère abstraire le chèque à une méthode distincte:

void() 
{ 
    if (ShouldDoStuff(myCollection)) 
     DoStuff(myCollection); 
    else 
     DoOtherStuff(myCollection); 
} 

private bool ShouldDoStuff(collection) 
{ 
    foreach() 
    { 
     if() 
      return true; 
    } 
    return false; 
} 

Cela fournit un code beaucoup plus propre à le niveau supérieur pour traiter vos algorithmes et supprime tout le fouillis discuté. Il sépare proprement les tâches dans void() de vérification et d'exécution des actions et les lecteurs savent instantanément exactement quel est le flux du programme sans avoir à discerner ce qu'ils font avec une logique booléenne ou de rupture qui se cache. Aucune méthode n'a plus d'une responsabilité ou tâche. Oui, il est possible que l'affiche veuille faire un autre travail dans leur foreach, mais c'est une discussion entièrement différente et non pas ce qui était décrit dans leur question. Si vous voulez simplement vérifier si la collection (ou l'objet) donné satisfait une certaine condition, cette vérification peut être déplacée vers une méthode séparée. Même laisse la porte ouverte pour les tests unitaires automatisés pour les trois composants.

Même si DoStuff et DoOtherStuff ne sont pas traités par leurs propres méthodes, ils offrent une meilleure lisibilité et un flux logique.

Questions connexes