In einer Reihe von Antworten heißt es: "Durchfallen ist legal, wenn der Fall leer ist."
Das ist nicht korrekt. Das ist der falsche Weg, darüber nachzudenken. Dies ist der Schluss, als ob C # C wäre, was nicht der Fall ist. In C hat jede Fallbezeichnung eine zugehörige Anweisungsliste, möglicherweise leer, und das Steuerelement fällt am Ende der Anweisungsliste durch. In C # ist das alles nicht der Fall.
In C # besteht ein Schalter aus einer Anzahl von Abschnitten , von denen jeder eine oder mehrere Fallbeschriftungen hat und von denen jeder ein oder mehrere hat Anweisungen . Wenn Sie
sagen %Vor%Es ist NICHT die Situation, dass es zwei Schalterabschnitte gibt, einen für den Fall 1 und einen für den Fall 2, und der Schalterabschnitt für den Fall 1 ist leer und fällt zu dem zweiten Block durch. Das wäre die Situation in C, aber C # ist nicht C.
In C # gibt es in diesem Beispiel EINEN Schalterabschnitt. Es hat zwei Bezeichnungen und eine Anweisungsliste. Es gibt KEINE leere Anweisungsliste zwischen den Fallbezeichnungen; Das kann nicht sein, weil die Anweisungsliste der letzten Beschriftung in der Sektion folgt. Lassen Sie mich das wiederholen: Es ist nicht so, dass es dort eine leere Anweisungsliste gibt. Es gibt überhaupt keine Anweisungsliste, nicht einmal eine leere Anweisungsliste .
Diese Charakterisierung ermöglicht es uns, die Durchgriffsregel in C # klar zu definieren, die "Fall durch ist immer illegal " ist. Wiederum ist es NICHT der Fall, dass die Kontrolle von der leeren Anweisungsliste von Fall 1 in Fall 2 "fällt" durch. Control nie fällt durch. Die Steuerung fällt hier nicht durch, weil Steuerelement die leere Anweisungsliste nach Fall 1 nie eingibt. Die Steuerung kann diese leere Anweisungsliste nicht eingeben, da dort keine leere Anweisungsliste an erster Stelle steht . Die Anweisungsliste beginnt erst nach Fall 2.
C # erzwingt die No-Fall-Through-Regel in jedem Switch-Abschnitt, einschließlich des letzten. Dies ist so, dass Schalterabschnitte willkürlich neu angeordnet werden können, möglicherweise durch mechanische Werkzeuge, ohne semantische Änderungen in das Programm einzuführen.
C # erzwingt die No-Fall-Through-Regel, indem es verlangt, dass der Endpunkt jedes Switch-Abschnitts nicht erreichbar ist. Ein Schaltabschnitt muss nicht in einer Pause enden. Es kann in einem Break, Return, Goto, Continue, Throw oder einer erkennbaren Endlosschleife enden:
%Vor%Alle oben genannten sind legal; Es gibt keine Pausen.
Versuchen Sie Folgendes:
%Vor% Beachten Sie, dass dies nur funktioniert, wenn kein Code in den case 1:
oder case 2:
blocks.i
Tags und Links c#