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