Enum.IsDefined mit markierten enums

8

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:

%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:)

    
gillyb 09.02.2011, 20:21
quelle

2 Antworten

12

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:

%Vor%

Wenn andererseits der Wert nicht innerhalb des Typs enum definiert ist, wird ToString einfach eine Zeichenfolgendarstellung des Werts dieses Werts ganzen Zahlen erzeugen zB:

%Vor%

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.

    
Dan Tao 09.02.2011, 20:26
quelle
0

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.

    
CodesInChaos 09.02.2011 20:26
quelle

Tags und Links