Ich lese gerade das Buch C # 4.0 in Kürze , was meiner Meinung nach eine ist ausgezeichnetes Buch, auch für fortgeschrittene Programmierer als eine gute Referenz verwenden.
Ich habe auf die Kapitel über die Grundlagen zurückgegriffen und bin auf einen Trick gestoßen, um festzustellen, ob ein bestimmter Wert in einem Enum definiert ist, wenn markierte Enums verwendet werden.
Das Buch stellt fest, dass die Verwendung von Enum.IsDefined
bei markierten Enums nicht funktioniert, und schlägt einen solchen Umweg vor:
Dies sollte wahr zurückgeben, wenn ein bestimmter Wert in einer Aufzählung definiert ist, die markiert ist.
Kann mir bitte jemand erklären, warum das funktioniert?
Vielen Dank im Voraus:)
Wenn Sie ToString
für einen beliebigen enum
-Wert eines Typs aufrufen, der mit dem [Flags]
-Attribut deklariert wurde, erhalten Sie für jeden definierten Wert Folgendes:
Wenn andererseits der Wert nicht innerhalb des Typs enum
definiert ist, wird ToString
einfach eine Zeichenfolgendarstellung des Werts dieses Werts ganzen Zahlen erzeugen zB:
Was das bedeutet ist, dass, wenn Sie die Ausgabe von ToString
als Zahl analysieren können (nicht sicher, warum der Autor decimal
gewählt hat), ist es nicht innerhalb des Typs definiert.
Hier ist eine Illustration:
%Vor%Die Ausgabe des obigen Programms lautet:
%Vor%So können Sie sehen, wie die vorgeschlagene Methode funktioniert.
Wenn der Wert von e
nicht ist, kann nicht mit einer Kombination von Flags erstellt werden ToString()
wird standardmäßig auf eine ganze Zahl gesetzt. Und ganze Zahlen werden natürlich als decimal
analysiert.
Aber warum Ihr Code als Dezimalzahl analysiert wird, ist mir nicht ganz klar. Aber wahrscheinlich funktionieren die Integraltypen nicht für beide enum
s, die auf Int64
und UInt64
basieren.