Jus*_*tin 43 c# generics enums casting
我正在编写一个实用程序函数,它从数据库中获取一个整数,并将一个类型化的枚举返回给应用程序.
这是我试图做的(注意我传入数据读取器和列名而不是int我的真实函数):
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;
}
Run Code Online (Sandbox Code Playgroud)
但它不会让我(T)value说:
无法将类型'System.Enum'转换为'T'.
我也读过很多关于使用的评论Enum.IsDefined.表现明智,听起来很糟糕.我怎样才能保证有效价值?
SLa*_*aks 67
像这样:
return (T)(object)value;
Run Code Online (Sandbox Code Playgroud)
por*_*ges 17
改变这个:
Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);
Run Code Online (Sandbox Code Playgroud)
对此:
T value = (T)Enum.ToObject(enumType, enumAsInt);
Run Code Online (Sandbox Code Playgroud)
并删除演员:)