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;
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.
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?
}
}
}
}
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.
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;
}