Anweisung mit statischen Feldern umschalten

8

Angenommen, ich habe eine Menge statischer Felder und möchte sie in switch verwenden:

%Vor%

Da C # keine nicht-konstante Anweisung innerhalb von switch erlaubt. Ich möchte verstehen, was diese Art von Design beabsichtigt. Wie sollte ich etwas wie oben in c # tun?

    
Ashutosh 14.09.2012, 18:22
quelle

6 Antworten

16

Es sieht so aus, als sollten diese String-Werte einfach konstant sein.

%Vor%

Wenn das keine Option ist (sie werden tatsächlich zur Laufzeit geändert), dann können Sie diese Lösung in eine Reihe von if / else if-Anweisungen umformen.

Warum müssen die Case-Anweisungen konstant sein? Indem sie konstant sind, kann die Aussage viel stärker optimiert werden. Es ist tatsächlich effizienter als eine Reihe von if / else if-Anweisungen (wenn auch nicht dramatisch, wenn Sie nicht viele von bedingten Prüfungen haben, die lange dauern). Es wird das Äquivalent einer Hash-Tabelle mit den case-Anweisungen als Schlüssel generieren. Dieser Ansatz kann nicht verwendet werden, wenn sich die Werte ändern können.

    
Servy 14.09.2012, 18:25
quelle
3

... C # erlaubt keine nicht-konstante Anweisung innerhalb von switch ...

Wenn Sie nicht verwenden können:

%Vor%

Sie können ein Wörterbuch verwenden :)

%Vor%     
OscarRyz 14.09.2012 18:27
quelle
2

Case Argument sollte zur Kompilierzeit konstant sein.

Verwenden Sie stattdessen const :

%Vor%     
abatishchev 14.09.2012 18:25
quelle
1

Ich nehme an, es gibt einen Grund, warum Sie diese Variablen nicht als const deklariert haben. Das sagte:

Die switch -Anweisung ist nur eine Kurzform für eine Menge von if / else if -Anweisungen. Wenn Sie also garantieren können, dass PID_1 , PID_2 und PID_3 nie gleich sind, entspricht das obige:

%Vor%     
egrunin 14.09.2012 18:28
quelle
1

Der kanonische Weg, um dies zu erreichen - wenn Ihre statischen Felder keine Konstanten sind - ist die Verwendung von Dictionary<Something, Action> :

%Vor%     
Joshua Honig 14.09.2012 18:31
quelle
0

Warum verwenden Sie kein enum?
Enum Schlüsselwort:
Ссылка

In Ihrem Fall kann es leicht über enum gehandhabt werden:

%Vor%     
Mykola Kushnir 15.09.2012 00:10
quelle

Tags und Links