873 votes

Boucle C# - break ou continue

Dans une boucle C# (n'hésitez pas à répondre pour d'autres langages), quelle est la différence entre break et continue comme un moyen de quitter la structure de la boucle, et de passer à l'itération suivante ?

Exemple :

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}

2 votes

Article de blog avec le point culminant de ci-dessous adamthings.com/post/2012/07/26/

18 votes

continue; arrêtera le traitement de l'appel en cours row et continuer avec le suivant row de la collection. D'autre part, break; laissera le foreach et les lignes restantes ne seront jamais traitées.

0 votes

1607voto

Michael Stum Points 72046

break quittera complètement la boucle, continue sera juste sauter l'itération en cours.

Par exemple :

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

Le break permet de sortir de la boucle à la première itération. DoSomeThingWith ne sera jamais exécuté. C'est ici :

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

N'exécutera pas DoSomeThingWith pour i = 0 mais la boucle sera continuer et DoSomeThingWith sera exécuté pour i = 1 à i = 9 .

4 votes

Pourquoi n'y a-t-il pas d'accolades autour de Continue ? Je sais que cela fonctionne sans elles, mais pourquoi ?

65 votes

@GeorgeWillcox Mon moi plus jeune et plus stupide n'avait pas encore appris la valeur de l'utilisation des accolades, toujours. (Elles sont facultatives en C# pour les déclarations simples, mais ne pas les mettre facilite l'introduction d'un bug par la suite. Voir aussi programmeurs.stackexchange.com/a/16530/6342 )

402voto

JeremiahClark Points 3020

Une façon très simple de comprendre cela est de placer le mot "boucle" après chacun des mots clés. Les termes ont maintenant un sens s'ils sont lus comme des expressions courantes.

break loop - le bouclage est interrompu et s'arrête.

continue loop - la boucle continue à s'exécuter avec l'itération suivante.

106voto

SemiColon Points 1053

rupture fait sauter le compteur du programme hors de la portée de la boucle la plus interne.

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

Cela fonctionne comme ceci

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

continuer saute à la fin de la boucle. Dans une boucle for, continue saute à l'expression d'incrémentation.

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

Cela fonctionne comme ceci

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}

2 votes

Je remarque que de nombreuses boucles ici utilisent simplement le standard for boucle, mais cela fonctionnera-t-il pour les pré et post testés ? while boucles ? Le site goto La notation m'incite à le croire, mais j'ai besoin d'une vérification.

1 votes

@Daniel, pour les boucles WHILE, vous pouvez utiliser BREAK et CONTINUE, sans problème.

1 votes

@DanielPark Pour les deux while ("pré-testé") et do - while (" post-testé "), après un continue; est satisfaite, la condition de la boucle est évaluée pour décider si une itération supplémentaire doit être effectuée. Bien sûr, avec break; la condition de la boucle est pas coché, la boucle est simplement quittée complètement. Ainsi, la goto L'analogie permet également de comprendre cet aspect.

30voto

palmsey Points 3799

break arrêterait le foreach boucle complètement, continue passerait à l'étape suivante DataRow .

20voto

yukondude Points 8756

Il y a plus que quelques personnes qui n'aiment pas break et continue . La dernière plainte que j'ai vue à leur sujet était dans JavaScript : Les bons côtés par Douglas Crockford. Mais je trouve que, parfois, l'utilisation de l'un d'entre eux simplifie vraiment les choses, surtout si votre langue ne comporte pas un do-while ou do-until style de boucle.

J'ai tendance à utiliser break dans les boucles qui recherchent quelque chose dans une liste. Une fois trouvé, il n'y a plus de raison de continuer, alors autant abandonner.

J'utilise continue lorsque vous faites quelque chose avec la plupart des éléments d'une liste, mais que vous voulez quand même en sauter quelques-uns.

Le site break La déclaration est également utile lorsqu'il s'agit d'obtenir une réponse valide de quelqu'un ou de quelque chose. Au lieu de :

Ask a question
While the answer is invalid:
    Ask the question

Vous pourriez éliminer certaines duplications et utilisations :

While True:
    Ask a question
    If the answer is valid:
        break

Le site do-until que j'ai mentionnée précédemment est la solution la plus élégante pour ce problème particulier :

Do:
    Ask a question
    Until the answer is valid

Pas de duplication, et pas break nécessaire non plus.

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