2012-06-13 28 views
7

¿Cómo puedes hacer algo como lo siguiente en C#?¿Cómo obtener el tipo de Nullable <Enum>?

Type _nullableEnumType = typeof(Enum?); 

supongo que una mejor pregunta es ¿por qué no se puede hacer eso cuando se puede hacer esto:

Type _nullableDecimalType = typeof(decimal?); 
+1

No existe tal tipo realmente, ¿cómo piensa utilizarlo? 'Enum' en sí mismo es un tipo de referencia, no un tipo de valor. –

Respuesta

14

Enum es no una enumeración - es la clase base para las enumeraciones, y es un tipo de referencia (es decir, un class). Esto significa que Enum? es ilegal, ya que Nullable<T> tiene una restricción que T : struct y Enum no satisface.

Así: o bien utilizar typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime), o más simplemente, typeof(EnumTypeKnownAtCompileTime?)

Usted también puede tener en cuenta que:

Enum x = {some value}; 

es una operación de boxeo, por lo que debe por lo general evitar el uso de Enum como parámetro, etc.

+0

guau lo extrañé :) –

+0

Gran explicación Marca. Gracias. – devlife

Cuestiones relacionadas