2012-06-13 15 views
7

Come si può fare qualcosa come il seguente in C#?Come ottenere il tipo di Nullable <Enum>?

Type _nullableEnumType = typeof(Enum?); 

immagino una domanda migliore è il motivo per cui non si può fare che quando si può fare questo:

Type _nullableDecimalType = typeof(decimal?); 
+1

Non esiste un tipo di questo tipo, come pensi di utilizzarlo? 'Enum' stesso è un tipo di riferimento, non un tipo di valore. –

risposta

14

Enum è non un enum - è la classe base per le enumerazioni, ed è un tipo di riferimento (ovvero un class). Ciò significa che Enum? è illegale, poiché Nullable<T> ha una limitazione che T : struct e Enum non soddisfa questo.

Quindi: o utilizzare typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime), o più semplicemente, typeof(EnumTypeKnownAtCompileTime?)

Si potrebbe anche voler sottolineare che:

Enum x = {some value}; 

è un'operazione di pugilato, così si dovrebbe di solito evitare di utilizzare Enum come parametro ecc.

+0

wow l'ho perso :) –

+0

Ottima spiegazione Marco. Grazie. – devlife

Problemi correlati