2010-12-22 25 views
5

que tienen una función que acepta un Enum (The base class) como un parámetro:¿Cómo convertir un Enum a un int?

public void SomeFunction(Enum e); 

Sin embargo no puedo por alguna razón echarlo a int. Puedo obtener el nombre del valor de enumeración pero no su representación integral.
Realmente no me importa el tipo de enumeración, solo necesito el valor integral. ¿Debo pasar un int en su lugar? ¿O estoy haciendo algo mal aquí?

+0

¿Cómo estás tratando de lanzar exactamente? – annakata

+1

@annakata Me gustaría * adivinar * '(int) e', que da" No se puede convertir el tipo 'System.Enum' a 'int' " –

+0

@annakata: Lo siento, pensé que soy obvio. Marc tiene razón. –

Respuesta

7

Enum no es realmente una enumeración ... confusa. Es una copia en recuadro de una enumeración; aún así, el siguiente debería funcionar:

int i = (int)(object)e; 

((object) este elenco no se le añade una caja, ya que es ya en caja)

Tenga en cuenta también que no todas las enumeraciones se basan en int; este truco de unboxing puede fallar para las enumeraciones que no sean int.

+0

Si se conoce el tipo real del 'Enum' (por ejemplo, Reflection.BindingFlags), se puede convertir a eso y luego simplemente usarlo como un valor entero o largo. Eso funcionará para los tipos enum cuyo tipo subyacente no es más grande que el tipo que está usando. – supercat

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

Esto funcionará independientemente del almacenamiento subyacente de la enumeración, mientras que las otras soluciones lanzará una InvalidCastException si la enumeración se almacena en otra cosa que no sea int32 (por ejemplo, un byte o short)