Kann mir jemand sagen, wie ich die Hauptschleife unterbrechen soll, wenn ich Schleifen verschachtelt habe?
Beispiel *:
* Dieser Code tut nichts, es ist nur ein Beispiel
Was sollte ich an die Stelle des Kommentars "Pause Hauptschleife" setzen? In Java gibt es Labels, die ich kaputt machen kann (wenn ich ein Label auf die Hauptschleife "MainLoop" setze, kann ich "break MainLoop;" schreiben und es wird gültig), aber was kann ich hier tun?
Danke im Rat!
return
ist oft möglich, indem die Schleifen in eine separate Funktion gesetzt werden. goto
. Einige Leute würden mich erschießen, weil sie die Verwendung der goto
-Anweisung vorgeschlagen haben, aber das Aufbrechen mehrerer Schleifen ist einer der Orte, an denen sie sehr nützlich (und effizient) sein kann:
oft ist es besser, dies in eine separate Funktion zu setzen und dann eine "Rückkehr"
zu machen %Vor%Ich weiß nicht, ob es eine Möglichkeit gibt, in C # aus verschachtelten Schleifen auszubrechen, aber erlaube mir, eine Umgehungslösung vorzuschlagen.
Sie könnten die Hauptschleife in eine Funktion werfen und von dieser Funktion zurückkehren. Sie können return false;
angeben, um einen vorzeitigen Abbruch anzuzeigen, und return true;
, um anzuzeigen, dass die Schleife den ganzen Weg durchlaufen hat, wenn das wichtig ist.
Es gibt keine gute generische Antwort. Der richtige Weg hängt vom wirklichen Problem ab. Der beste Weg könnte sein, die äußere Schleife in eine Funktion zu setzen und dann return;
zu verwenden, um daraus auszubrechen. Es könnte x=100; y=100;
sein. Es könnte done=true;
sein. Verdammt, es könnte sogar goto
(Scherz) sein.
Nicht empfehlenswert, aber Sie können goto
verwenden. Siehe dies .
Nicht empfohlen, weil dadurch der Fluss schwieriger zu verstehen ist. Andere Option ist natürlich, eine Flagge in der inneren Schleife zu setzen und es in der äußeren Schleife zu überprüfen, ich habe das als offensichtlich hingenommen und nehme an, dass Sie es sowieso wissen ..:)
Da Sie, wie Sie bereits erwähnt haben, keine Bezeichnungen für den Befehl break
haben, können Sie Folgendes tun:
Wie andere gesagt haben, hängt die "richtige" Antwort von dem Problem ab, das Sie lösen. Wenn du kannst, ist es die bevorzugte Route, sie in kleinere Stücke aufzuteilen. Etwas an diesem Modell:
%Vor%Meiner Meinung nach ist es in unterschiedlichem Maße hässlich, mehrere Return-Anweisungen von einer einzigen Funktion zu erhalten, zusätzliche Flags zu verwenden oder ( shudder ) GOTOs zu verwenden. Aber manchmal ist eine davon notwendig.
Bearbeiten: Dies demonstriert, wie Sie mit dieser Methode ein nützliches Objekt einer Art zurückgeben, das Sie "Kunde" oder "IDataAccess" oder "bool" oder etwas anderes als "object" haben Rückgabetypen, wenn diese für real verwendet werden.
Tags und Links .net c# nested-loops labels