Wie kann ich mehr als eine Konstante für einen Switch-Fall in C # verwenden?

7

Wie kann ich mehr als eine Konstante für einen Schalterfall C # verwenden? Konzeptionell suche ich nach etwas wie diesem:

%Vor%     
KentZhou 15.06.2010, 18:17
quelle

6 Antworten

5

Sie nicht, Sie verwenden Fall-through.

%Vor%     
Ed S. 15.06.2010, 18:18
quelle
34

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.

    
Eric Lippert 15.06.2010 22:40
quelle
15
%Vor%     
drharris 15.06.2010 18:18
quelle
7

Am nächsten Fall Fälle in c # fallen:

%Vor%

Siehe hier für weitere Informationen:

Ссылка

    
Gabriel Magana 16.06.2010 17:16
quelle
3

Versuchen Sie Folgendes:

%Vor%

Beachten Sie, dass dies nur funktioniert, wenn kein Code in den case 1: oder case 2: blocks.i

vorhanden ist     
Ian Jacobs 15.06.2010 18:20
quelle
0

Sie können so etwas tun:

%Vor%     
Juran 11.11.2015 02:58
quelle

Tags und Links