81 votes

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 en sortir d'un seul coup ?

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

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

Et quelque chose d'affreux, comme goto ?

// in the innermost loop
goto BREAK
// ...
BREAK: break; break; break;

95voto

Michael Anderson Points 21181

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

76voto

Fadrian Sudaman Points 4659

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

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

29voto

Andrew Points 6844

Goto n'est hideux que lorsqu'on en abuse. Pour sortir de la boucle la plus interne de certaines imbrications, c'est acceptable. MAIS... on doit se demander pourquoi il y a tant d'imbrications en premier lieu.

Réponse courte : Non.

3voto

tolu619 Points 11

Si vous voulez sortir d'une méthode entière, alors utilisez le code que j'ai posté ci-dessous. Si vous voulez seulement sortir d'une série de boucles à l'intérieur d'une méthode sans sortir de la méthode, alors une des réponses qui ont déjà été postées fera l'affaire.

Si (TimeToStop) {return;}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X