878 Stimmen

C#-Schleife - break vs. continue

Was ist in einer C#-Schleife (Sie können auch für andere Sprachen antworten) der Unterschied zwischen break y continue als Mittel, um die Struktur der Schleife zu verlassen und zur nächsten Iteration zu gelangen?

Beispiel:

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

2 Stimmen

Blog-Beitrag mit Höhepunkt von unten adamthings.com/post/2012/07/26/

18 Stimmen

continue; stoppt die Verarbeitung der aktuellen row und weiter mit der nächste row aus der Sammlung. Auf der anderen Seite, break; wird die foreach Anweisung vollständig ausgeführt, und die verbleibenden Zeilen werden nie verarbeitet.

0 Stimmen

20voto

yukondude Punkte 23093

Es gibt mehr als ein paar Leute, die das nicht mögen. break y continue . Die letzte Beschwerde, die ich über sie gesehen habe, war in JavaScript: Die guten Seiten von Douglas Crockford. Aber ich finde, dass die Verwendung eines von ihnen die Dinge manchmal wirklich vereinfacht, vor allem, wenn Ihre Sprache nicht über ein do-while o do-until Art der Schleife.

Ich neige dazu, die break in Schleifen, in denen eine Liste nach etwas durchsucht wird. Wenn man etwas gefunden hat, hat es keinen Sinn mehr, weiterzumachen, also kann man genauso gut aufhören.

Ich benutze continue wenn Sie etwas mit den meisten Elementen einer Liste machen, aber dennoch einige überspringen wollen.

El break Anweisung ist auch nützlich, wenn man eine gültige Antwort von jemandem oder etwas abfragt. Anstelle von:

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

Sie könnten einige Überschneidungen und Verwendungen vermeiden:

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

El do-until Schleife, die ich bereits erwähnt habe, ist die elegantere Lösung für dieses spezielle Problem:

Do:
    Ask a question
    Until the answer is valid

Keine Überschneidungen und keine break auch nicht erforderlich.

13voto

Pritom Nandy Punkte 1215

Alle haben eine sehr gute Erklärung gegeben. Ich poste meine Antwort trotzdem, nur um ein Beispiel zu geben, falls das helfen kann.

// break statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // It will force to come out from the loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Hier ist die Ausgabe:

0[Gedruckt] 1[Gedruckt] 2[Gedruckt]

3[Gedruckt] & 4[Gedruckt] werden also nicht angezeigt, da es einen Bruch gibt, wenn i == 3

//continue statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue; // It will take the control to start point of loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Hier ist die Ausgabe:

0[Gedruckt] 1[Gedruckt] 2[Gedruckt] 4[Gedruckt]

3[Gedruckt] wird also nicht angezeigt, da es eine Fortsetzung gibt, wenn i == 3

7voto

Sona Rijesh Punkte 896

Pause

Break erzwingt den sofortigen Abbruch einer Schleife.

Weiter

Dies bewirkt das Gegenteil von Pause. Anstatt die Schleife zu beenden, wird die Schleife sofort wieder aufgenommen und der Rest des Codes übersprungen.

6voto

Maltrap Punkte 2610

Einfache Antwort:

Pause verlässt die Schleife sofort.
Weiter beginnt die Bearbeitung des nächsten Elements. (Falls es welche gibt, durch Sprung zur auswertenden Zeile des for/while)

6voto

Colonel Panic Punkte 125419

Zum Beispiel

foreach(var i in Enumerable.Range(1,3))
{
    Console.WriteLine(i);
}

Druckt 1, 2, 3 (auf separaten Zeilen).

Hinzufügen einer Unterbrechungsbedingung bei i = 2

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        break;

    Console.WriteLine(i);
}

Jetzt gibt die Schleife 1 aus und hält an.

Ersetzen Sie die Pause durch eine Fortsetzung.

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        continue;

    Console.WriteLine(i);
}

Nun werden die Drucke 1 und 3 in eine Schleife gelegt (2 wird übersprungen).

So, break beendet die Schleife, während continue zur nächsten Iteration übergeht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X