2010-12-22 5 views
5

Ich habe eine Funktion, die ein Enum (The base class) als Parameter akzeptiert:Wie man eine Enum zu einem int wirft?

public void SomeFunction(Enum e); 

aber ich kann aus irgendeinem Grund, es nicht zu gieße int. Ich kann den Namen des Aufzählungswerts erhalten, aber es ist keine integrale Darstellung.
Ich interessiere mich wirklich nicht für den Typ der Aufzählung, ich brauche nur den integralen Wert. Soll ich stattdessen einen Int übergeben? Oder mache ich hier etwas falsch?

+0

Wie genau versuchst du zu wirken? – annakata

+1

@annakata Ich würde * raten * '(int) e', was gibt" Kann nicht konvertieren Typ 'System.Enum' zu 'Int' " –

+0

@annakata: Sorry, ich dachte, ich bin offensichtlich. Marc hat Recht. –

Antwort

7

Enum ist nicht wirklich eine enum ... verwirrend. Es ist eine Box-Kopie eines Enums; Dennoch sollten folgende Arbeiten:

int i = (int)(object)e; 

(diese (object) Guss hinzufügen nicht eine Box, da es bereits Box ist)

Beachten Sie auch, dass nicht alle Aufzählungen basieren auf int; Dieser Unboxing-Trick kann für nicht-Enrols nicht int enums.

+0

Wenn der tatsächliche Typ der'Enum' bekannt ist (z. B. Reflection.BindingFlags), kann man dazu umwandeln und diesen dann einfach als Integer- oder Long-Wert verwenden. Das funktioniert für Aufzählungstypen, deren zugrunde liegender Typ nicht größer ist als der verwendete Typ. – supercat

0
Int32 intValue = (Int32)Enum.Parse(e.GetType(), e.ToString()); 
13
int i = Convert.ToInt32(e); 

Dies funktioniert unabhängig von der zugrunde liegenden Speicher der Enumeration, während die anderen Lösungen wird eine InvalidCastException werfen, wenn die Enum in etwas anderes als int32 gespeichert ist (sagen wir, ein byte oder short)