web-dev-qa-db-fra.com

Comment sortir de plusieurs boucles à la fois en C #?

Que se passe-t-il si j'ai des boucles imbriquées et que je veux les interrompre toutes en même temps?

while (true) {
    // ...
    while (shouldCont) {
        // ...
        while (shouldGo) {
            // ...
            if (timeToStop) {
                break; // Break out of everything?
            }
        }
    }
}

En PHP, break prend un argument pour le nombre de boucles à sortir. Peut-on faire quelque chose comme ça en C #?

Et quelque chose de hideux, comme goto?

// In the innermost loop
goto BREAK
// ...
BREAK: break; break; break;
63
Nick Heiner

Extrayez vos boucles imbriquées dans une fonction et vous pouvez ensuite utiliser return pour sortir de la boucle de n'importe où, plutôt que d'interrompre.

80
Michael Anderson

Introduisez un autre indicateur de contrôle et placez-le dans toutes vos conditions imbriquées comme ci-dessous. Remplace également la condition while (true) que vous avez par

bool keepLooping = true;
while (keepLooping) {
    // ...
    while (shouldCont && keepLooping) {
        // ...
        while (shouldGo && keepLooping) {
            // ...
            if (timeToStop) { 
                keepLooping  = false;
                break; // break out of everything?
            }
        }  
    }
}
63
Fadrian Sudaman

Goto n'est hideux que lorsqu'il est maltraité. Pour abandonner la boucle la plus intérieure de certains emboîtements, il est acceptable. MAIS ... il faut se demander pourquoi il y a tant de nidification là-bas en premier lieu.

Réponse courte: Non.

27
Andrew

Si vous souhaitez sortir d'une méthode entière, utilisez le code ci-dessous. Si vous voulez seulement sortir d'une série de boucles au sein d'une méthode sans sortir de la méthode, alors l'une des réponses déjà publiées fera l'affaire.

if (TimeToStop)
{
   return;
}
2
tolu619