C# loop - break vs.weiter
-
08-06-2019 - |
Frage
In einer C# (fühlen Sie sich frei, Sie zu beantworten für andere Sprachen) Schleife, was ist der Unterschied zwischen Pause und weiter als Mittel, die Organisation zu verlassen der Schleife, und gehen Sie auf die nächste iteration?
Beispiel:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
Lösung
break
beenden Sie die Schleife vollständig, continue
nur skip die aktuelle iteration.
Zum Beispiel:
for (int i = 0; i < 10; i++) {
if (i == 0) {
break;
}
DoSomeThingWith(i);
}
Die Pause wird verursachen die Schleife zu beenden, die auf der ersten iteration - DoSomeThingWith
werden nie ausgeführt.Diese hier:
for (int i = 0; i < 10; i++) {
if(i == 0) {
continue;
}
DoSomeThingWith(i);
}
Nicht ausführen DoSomeThingWith
für i = 0
, aber die Schleife wird weiter und DoSomeThingWith
durchgeführt werden, i = 1
zu i = 9
.
Andere Tipps
Ein wirklich einfacher Weg, dies zu verstehen, ist die Wort "Schleife" nach einzelnen keywords.Konditionen machen Sinn, wenn Sie genau Lesen, wie die alltäglichen Redewendungen.
break
Schleife - Schleife ist unterbrochen und Stoppt.
continue
Schleife - Schleife weiterhin ausgeführt, mit der nächsten iteration.
Pause Ursachen der Programm-Zähler, um zu springen aus dem Geltungsbereich der innersten Schleife
for(i = 0; i < 10; i++)
{
if(i == 2)
break;
}
Wie das funktioniert
for(i = 0; i < 10; i++)
{
if(i == 2)
goto BREAK;
}
BREAK:;
weiter springt an das Ende der Schleife.In einer for-Schleife, continue springt zum increment-Ausdruck.
for(i = 0; i < 10; i++)
{
if(i == 2)
continue;
printf("%d", i);
}
Wie das funktioniert
for(i = 0; i < 10; i++)
{
if(i == 2)
goto CONTINUE;
printf("%d", i);
CONTINUE:;
}
break
aufhören würde die foreach
Schleife vollständig, continue
würde überspringen, um die nächste DataRow
.
Früher habe ich immer verwirrt, ob ich verwenden soll, break oder continue.Dies ist, was mir hilft, denken Sie daran:
Bei der Verwendung break vs continue?
- Pause - es ist wie oben zu brechen.Es ist traurig, Ihr seid Abschied.
- Weiter - bedeutet, dass Sie sind gonna geben heute eine Pause ein und Sortieren Sie alle morgen (alsoüberspringen Sie die aktuelle iteration)!
Es gibt mehr als ein paar Leute, die nicht wie break
und continue
.Die neueste Beschwerde, die ich sah über Sie war in JavaScript:Die Gute Teile von Douglas Crockford.Aber ich finde, dass manchmal mit einer von Ihnen wirklich vereinfacht die Dinge, besonders wenn Ihre Sprache nicht gehören do-while
oder do-until
Stil Schleife.
Ich Neige dazu, verwenden Sie break
in Schleifen, die auf der Suche eine Liste für etwas.Einmal gefunden, gibt es keinen Punkt in der Weiterbildung, so dass Sie könnte genauso gut beenden.
Ich benutze continue
wenn etwas zu tun mit die meisten Elemente einer Liste, aber immer noch wollen, zu überspringen ein paar.
Die break
Anweisung kommt auch in praktisch, wenn das polling-Verfahren für eine gültige Antwort-von jemandem oder etwas.Statt:
Ask a question
While the answer is invalid:
Ask the question
Könntest du eliminieren einige Vervielfältigung und Nutzung:
While True:
Ask a question
If the answer is valid:
break
Die 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 Vervielfältigung und kein break
erforderlich.
Alle haben eine sehr gute Erklärung.Ich bin immer noch die Veröffentlichung meiner Antwort nur zu geben ein Beispiel, wenn, die helfen können.
// 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[Gedruckte]
So 3[Gedruckt] & 4[Gedruckt] werden nicht angezeigt, da es zu brechen, 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[Gedruckte]
So 3[Gedruckt] werden nicht angezeigt, da es weiterhin, wenn i == 3
Pause
Pause erzwingt eine Schleife zu beenden, sofort.
Weiter
Dies macht das Gegenteil zu brechen.Stattdessen beendet die Schleife sofort loops wieder, überspringen Sie den rest des Codes.
Durch Beispiel
foreach(var i in Enumerable.Range(1,3))
{
Console.WriteLine(i);
}
Druckt 1, 2, 3 (in separaten Zeilen).
Fügen Sie eine break-Bedingung bei i = 2
foreach(var i in Enumerable.Range(1,3))
{
if (i == 2)
break;
Console.WriteLine(i);
}
Nun die Schleife druckt 1 und Stoppt.
Ersetzen Sie die Pause mit einem weiter.
foreach(var i in Enumerable.Range(1,3))
{
if (i == 2)
continue;
Console.WriteLine(i);
}
Jetzt Schleife druckt 1 und 3 (skipping 2).
So break
die Schleife Stoppt, während continue
springt zum nächsten iteration.
Ruby ist leider ein bisschen anders.PS:Meine Erinnerung ist ein bisschen verschwommen auf diese also entschuldige mich, wenn ich falsch bin,
anstelle des Pause/weiter, hat Sie Pause/weiter, die dasselbe Verhalten in Bezug auf loops
Schleifen (wie alles andere) sind Ausdrücke, und "return" das Letzte, was Sie getan haben.Die meisten der Zeit, immer den Rückgabewert von einer Schleife sinnlos ist, so dass jeder nur tut dies
a = 5
while a < 10
a + 1
end
Allerdings kann man dies tun
a = 5
b = while a < 10
a + 1
end # b is now 10
JEDOCH, eine Menge von ruby-code "emuliert" eine Schleife mit einem block.Das kanonische Beispiel ist
10.times do |x|
puts x
end
Wie ist es viel häufiger für die Menschen zu wollen, Dinge zu tun, mit dem Ergebnis von einem block, und hier wird es chaotisch.Pause/weiter bedeuten verschiedene Dinge in den Kontext eines Blocks.
break springt aus der code, der als block
als Nächstes überspringen Sie den rest des Codes im block, und 'return', was Sie angeben, zu der Aufrufer den block.Dies macht keinen Sinn, ohne Beispiele.
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
So yeah.Rubin ist großartig, aber es hat einige schreckliche Ecke-Fällen.Dies ist die zweite Schlimmste, das ich gesehen habe in meinen Jahren, die es verwenden :-)
Einfache Antwort:
Pause beendet die Schleife sofort.
Weiter beginnt die Verarbeitung des nächsten Elements.(Wenn Sie vorhanden sind, durch einen Sprung auf der Auswertung Linie der für/während)
Bitte lassen Sie mich das offensichtliche:beachten Sie, dass das hinzufügen von weder brechen noch weiter, setzt dein Programm;d.h.Ich gefangen für eine gewisse Fehler, dann nach der Anmeldung, ich wollte, um die Verarbeitung fortzusetzen, und es waren mehr code von Aufgaben zwischen der nächsten Zeile, so dass ich nur lassen Sie es fallen Sie durch.
Zur Pause komplett aus einer foreach-Schleife, Pause verwendet wird;
Zu gehen, um die nächste iteration in der Schleife, weiter verwendet wird;
Pause ist nützlich, wenn Sie die Schleife durch eine Sammlung von Objekten (wie Zeilen in einer Datentabelle) und Sie sind auf der Suche nach einem bestimmten Spiel, wenn Sie feststellen, dass überein, gibt es keine Notwendigkeit, weiterhin durch die restlichen Zeilen, also wollen Sie ausbrechen.
Weiter ist nützlich, wenn Sie erreicht haben, was Sie brauchen, um in der Seite einen loop-iteration.Sie haben normalerweise weiter nach einer wenn.
wenn Sie nicht wollen, zu verwenden Pause Sie erhöhen nur den Wert von I in der Weise, dass Sie es machen iteration condition false und die Schleife wird nicht ausgeführt auf der nächsten iteration.
for(int i = 0; i < list.Count; i++){
if(i == 5)
i = list.Count; //it will make "i<list.Count" false and loop will exit
}
Für andere Sprachen:
'VB
For i=0 To 10
If i=5 then Exit For '= break in C#;
'Do Something for i<5
next
For i=0 To 10
If i=5 then Continue For '= continue in C#
'Do Something for i<>5...
Next