Wird in C # noch jemand benutzt, und wenn ja, warum?
Ich Frage mich, ob jemand verwendet immer noch den "goto" - Schlüsselwort-syntax in C# und was für mögliche Gründe gibt es dafür.
Ich zu der Ansicht tendieren, sämtliche Aussagen, die Ursache, den Leser zu springen, um den code als schlechte Praxis, aber Sie fragte sich, ob es irgendwelche glaubwürdigen Szenarien für den Einsatz einer solchen syntax?
InformationsquelleAutor der Frage Brian Scott | 2011-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige (seltene) Fälle, in denen goto kann tatsächlich verbessern die Lesbarkeit. In der Tat, die Dokumentation, die Sie im Zusammenhang mit Listen zwei Beispiele:
Hier ist ein Beispiel für das letztere:
Natürlich, es gibt andere Möglichkeiten, um dieses problem so gut, wie die Umgestaltung der code in einer Funktion, mithilfe einer dummy-block, um es, und so weiter. (siehe diese Frage für details). As a side note, the Java language Designer zu verbieten springen komplett und die Einführung einer beschriftet Pause - Anweisung anstelle.
InformationsquelleAutor der Antwort Heinzi
Ich erinnere mich an diesen Teil
Etwas wie dies
Finden Diese
InformationsquelleAutor der Antwort V4Vendetta
Ich benutze es weitgehend in Eduasync zu zeigen, die Art von code, den der compiler generiert für Sie bei der Verwendung von asynchronen Methoden in C# 5. Würden Sie sehen, die gleiche Sache in iterator-Blöcke.
In "normalen" code, aber ich kann mich nicht erinnern, das Letzte mal habe ich es...
InformationsquelleAutor der Antwort Jon Skeet
springen ist ideal für das brechen von vielen loops, wo brechen würde nicht gut funktionieren (z.B. nach Fehlerzuständen), und als Kragen, sagte goto wird von dem compiler zu generieren switch-Anweisungen und einige andere Dinge auch.
InformationsquelleAutor der Antwort Jesus Ramos
Verwendet der compiler
goto
Aussagen in diversen Stücken der generierte code, z.B. in generierten iterator-block-Typen (generiert, wenn mithilfe deryield return
keyword - ich bin mir ziemlich sicher, dass die generierten XML-serialisieren-Typen haben auch ein paargoto
Aussagen gibt es ja auch irgendwo.Sehen Iterator-block-Implementierung details: auto-generierten Zustandsautomaten für einige mehr details, warum /wie der C# - compiler verarbeitet diese.
Andere als generierten code gibt es nicht einen guten Grund für die Verwendung einer
goto
- Anweisung im normalen code - es macht den code schwerer zu verstehen und als Folge mehr Fehler-anfällig. Auf der anderen Seite mitgoto
statements im generierten code wie folgt vereinfachen die Generierung und ist normalerweise in Ordnung, weil niemand wird, um zu Lesen (oder ändern) der generierte code, und es gibt keine chance, dass Fehler gemacht werden, weil eine Maschine tut das schreiben.Sehen Go-to statement considered harmful für ein argument gegen
goto
sowie ein klassisches Stück von Programmier-Geschichte.InformationsquelleAutor der Antwort Justin
Ich erinnere mich nicht, jemals verwenden
goto
. Aber vielleicht es verbessert die Absicht, eine forever-Schleife, die Sie nie wirklich verlassen möchten (keinebreak
aber man kann immer nochreturn
oderthrow
):Dann wieder eine einfache
while (true)
sollte ausreichen...Auch, Sie könnte Verwendung in einer situation, wo Sie wollen die erste iteration einer Schleife zu beginnen, in der Mitte der Schleife: schauen Sie hier für ein Beispiel.
InformationsquelleAutor der Antwort Jordão
Den Prozessor implementiert mindestens eine Anweisung springen und ich bin mir sicher, dass viele der Aussagen, die jene benutzen, die in Ihrer Umsetzung oder interpretation.
Eines der guten Dinge über die Verwendung einer 3. oder 4. generation ausgerichtet ist, dass diese physikalischen details abstrahiert von uns entfernt. Während wir uns sollte bewusst sein, der Gesetz der leaky abstraction ich denke, dass sollten wir auch nutzen, um unsere Werkzeuge, wie Sie gedacht sind (sorry,). Wenn ich code schreiben, und eine
goto
schien wie eine gute Idee, es wäre Zeit zu überarbeiten. Der Zweck einer strukturierten Sprache ist zu vermeiden, dass diese "Sprünge" und erstellen Sie einen logischen Fluss in unserem engineering.Ich sollten vermeiden, die Verwendung von
break
aber ich kann nicht übersehen, der performance-Vorteil. Allerdings, wenn ich verschachtelte Schleifen, die sich gegenseitig brauchen, umbreak
es ist an der Zeit zu überarbeiten.Wenn jemand vorschlagen kann, die eine Nutzung von
goto
scheint besser als die Umgestaltung werde ich mich gerne zurückziehen, meine Antwort.Ich hoffe, ich bin nicht schuldig, hetzen, um die "Fahrradschuppen" hier. Wie Kragen, sagt, was ist gut genug für Dijkstra ist gut genug für mich.
InformationsquelleAutor der Antwort Jodrell
Schaute ich mir die .net-source-code und lief in diese im ControlStyle-Eigenschaft für ein WebControl
So, auch Microsoft nutzt es
InformationsquelleAutor der Antwort Nick DeVore
Es ist besonders gut, wenn Sie zum Aufräumen vor der Rückgabe von einer Methode zum Beispiel.
Inspiriert von: http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/
InformationsquelleAutor der Antwort Victor Maia Aldecôa
Goto ist niemals besser. Und weiter, Pause (außer bei switch/case), (mehrere) return-und throw sollte auch gehalten werden, um die barest minimum. Sie nie wollen, zu entkommen, von der Mitte des nest Schleifen. Sie möchten immer die loop-control-Anweisungen haben alle die loop-Kontrolle. Einrücken der information, und alle diese Anweisung zu werfen, dass die Informationen entfernt. Sie könnte genauso gut nehmen Sie alle Einrücken.
InformationsquelleAutor der Antwort Kirk Augustin