Sto scrivendo una funzione di utilità che ottiene un numero intero dal database e restituisce un enum digitato all'applicazione.Posso trasmettere da un tipo generico a un enum in C#?
Ecco quello che ho provato a fare (nota passo in un nome di lettore di dati e la colonna al posto del int
nella mia vera funzione):
public static T GetEnum<T>(int enumAsInt)
{
Type enumType = typeof(T);
Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);
if (Enum.IsDefined(enumType, value) == false)
{
throw new NotSupportedException("Unable to convert value from database to the type: " + enumType.ToString());
}
return (T)value;
}
Ma non mi permette di scaccio (T)value
dicendo:
Impossibile convertire il tipo "System.Enum" in "T".
Inoltre ho letto un bel po 'di recensioni contrastanti sull'utilizzo di Enum.IsDefined
. Per quanto riguarda le prestazioni, sembra molto scarso. In quale altro modo posso garantire un valore valido?
Si noti che se il caso fosse stato in un altro modo, per esempio, devi fare '(Enum) v alue' e ottieni 'Impossibile convertire il tipo 'T' in 'System.Enum'', potresti semplicemente fare un cast' as', come 'value as Enum'. – nawfal
Non è vero (almeno nel mio caso), si ottiene il vecchio 'L'operatore as deve essere utilizzato con un riferimento o un tipo nullable (' Foo.bar 'è un tipo di valore non annullabile). – keithl8041