Pause intérieure boucle foreach et continuer externe de la boucle foreach
Si j'ai une boucle foreach imbriquée comment dois-je faire casser la boucle interne et de dire à l'extérieur pour continuer à ce point sans en faire tout autre code ci-dessous la boucle interne?
foreach(var item in items)
{
foreach(var otheritem in otheritems)
{
if (!double.TryParse(otheritem))
{
//break inner loop
//continue outer loop so we never get to DoStuff()
}
}
DoStuff();
}
- Je remarque que ce n'est pas la signature de du double.TryParse.
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de l'aide d'un drapeau?
Commencer par l'écriture d'une meilleure version de Double.TryParse:
OK, maintenant vous avez quelque chose que vous pouvez facilement l'utiliser pour éliminer la boucle intérieure entièrement, de sorte que le problème disparaît:
Plutôt que d'essayer de comprendre comment déplacer le contrôle, il suffit d'écrire le code qui ressemble à la logique. Si la logique est "ne pas faire des trucs si les autres éléments n'analysent pas comme doubles", puis utilisez le Tout prédicat de tester toutes les autres articles pour voir si l'un d'entre eux ne s'analyse pas en double. Pas de boucles, donc pas de fantaisie, boucle de contrôle nécessaires.
J'ai tendance à aller un peu plus loin; la capture de la logique dans une requête, puis itérer la requête:
Simple est le meilleur...
Une autre approche consiste à refactoriser:
La
return
assure laDoStuff
n'arrive pas.Vous avez besoin d'une variable pour controler et comme tu le dis.. faire un
break
.Iirc une pause; l'état ne pause le plus proche de la boucle, de sorte que la délivrance d'un break; dans la boucle intérieure devrait continuer avec l'élément suivant de la boucle externe.
Il n'est pas clair à partir de votre extrait de code, mais si vous n'avez qu'à regarder pour les non-parseable valeurs dans
otheritems
ensuite, vous pouvez utiliser LINQ: