Ich habe die Enum.IsDefined()
-Methode für eine Zeichenkette verwendet, aber ich bekomme False
in einer Situation, in der ich denke, dass ich True
bekommen soll. Bitte überprüfen Sie den folgenden Code:
C # Geigen-Demo
Ergebnis:
Ich weiß nicht, warum ich False
im zweiten Fall bekommen soll. Jede Hilfe wird geschätzt.
Wenn Sie eine Zeichenfolge an die Methode IsDefined()
übergeben, fragen Sie, ob in der enum mit diesem Namen ein Wert vorhanden ist . Die Dokumentation lautet:
Der value-Parameter kann einer der folgenden sein:
? Jedes Mitglied vom Typ enumType.
• Eine Variable, deren Wert ein Enumerationselement vom Typ enumType ist.
• Die Zeichenfolgendarstellung des Namens eines Aufzählungsmembers. Die Zeichen in der Zeichenfolge müssen dieselbe Groß- / Kleinschreibung wie der Name des Aufzählungsmitglieds haben.
• Ein Wert des zugrunde liegenden Typs von enumType.
(Betonung meiner)
Es ist ein wenig verwirrend zu lesen, weil die erste, zweite und vierte Option vor allem dasselbe ergeben: ein Wert des Enum-Typs, der übergeben wird (natürlich verpackt).
Aber die dritte Option ist, was in Ihrem Szenario vor sich geht, und die Zeichenfolge muss mit dem Namen eines Aufzählungsmembers übereinstimmen. Sie übergeben die Zeichenfolge "1"
, und die einzigen gültigen Namen in der Enumeration sind "Zero"
und "One"
. Die Zeichenkette "1"
passt nicht zu einer dieser Zeichenketten.% Co_de% gibt also IsDefined()
zurück.
Wenn Sie eine Zeichenfolge als Argument übergeben, wird überprüft, ob einer der Namen der Enumeration der angegebenen Zeichenfolge entspricht. Unten wird für beide Wahr zurückgegeben:
%Vor%Weitere Informationen finden Sie im Quellcode (Zeile 1503) . Dennoch ist es besser, diese Informationen aus der Dokumentation abzuleiten, wie @Peter Dunihos Antwort gezeigt hat, da sich die Implementierung ändern kann. Aber trotzdem, wenn Sie neugierig sind, ist der Quellcode da.