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.
Case Argument sollte zur Kompilierzeit konstant sein.
Verwenden Sie stattdessen const
:
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:
Der kanonische Weg, um dies zu erreichen - wenn Ihre statischen Felder keine Konstanten sind - ist die Verwendung von Dictionary<Something, Action>
:
Warum verwenden Sie kein enum?
Enum Schlüsselwort:
Ссылка
In Ihrem Fall kann es leicht über enum gehandhabt werden:
%Vor%Tags und Links .net c# static switch-statement