c# generics casting enums

¿Puedo transmitir desde un tipo genérico a una enumeración en C#?



generics casting (2)

Cambia esto:

Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);

a esto:

T value = (T)Enum.ToObject(enumType, enumAsInt);

y quita el molde :)

Estoy escribiendo una función de utilidad que obtiene un número entero de la base de datos y devuelve una enumeración a la aplicación.

Aquí es lo que traté de hacer (nota que paso en un lector de datos y el nombre de la columna en lugar de la int en mi función real):

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; }

Pero no me deja emitir un (T)value diciendo:

No se puede convertir el tipo ''System.Enum'' a ''T''.

También he leído bastantes críticas mixtas sobre el uso de Enum.IsDefined . En cuanto a rendimiento, suena muy pobre. ¿De qué otra manera puedo garantizar un valor válido?


Me gusta esto:

return (T)(object)value;