Sie können nur Zeichenfolgen verwenden, die zum Zeitpunkt der Kompilierung bekannt sind. Der Compiler kann das Ergebnis dieses Ausdrucks nicht bestimmen.
Vielleicht können Sie es versuchen
%Vor%case MyEnum.VALUE1.toString (): // Ist das nicht gleich "VALUE1"?
Nein, nicht unbedingt: Sie können Ihre eigene Implementierung von toString()
}
Außerdem kann jemand, der Ihren Code verwaltet, diese Implementierung hinzufügen, nachdem Sie das Unternehmen verlassen haben. Deshalb sollten Sie sich nicht auf String-Werte verlassen und stattdessen stattdessen numerische Werte verwenden (wie zB die Konstanten MyEnum.VALUE1
, MyEnum.VALUE2
usw.) von enum
s.
BEARBEITEN : Entschuldigung für eine C # -Antwort auf eine Java-Frage. Ich weiß nicht, was dort schiefgelaufen ist.
Es ist möglich, Zeichenfolgenwerte (einschließlich der Zeichenfolgenwerte von enums) zu verwenden. Sie können jedoch nur Kompilierzeitkonstanten verwenden. Sie rufen eine Methode ToString()
auf, die zur Laufzeit ausgewertet werden muss.
Ab C # 6 können Sie diese konstante Alternative verwenden: case nameof(SomeEnum.SomeValue):
Name von () wird zur Kompilierzeit ausgewertet, einfach zu einer Zeichenkette, die dem (unqualifizierten) Namen der gegebenen Variable, des Typs oder des Mitglieds entspricht. Sein Wert entspricht dem von SomeEnum.ToString()
.
Tags und Links java enums switch-statement tostring case