我正在编写一个实用程序函数,它从数据库中获取一个整数,并将一个类型化的枚举返回给应用程序。
这是我尝试做的事情(注意我在实际函数中传入了数据读取器和列名而不是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;
}
但它不会让我(T)value
说:
无法将'System.Enum'类型转换为'T'。
此外,我已经阅读了很多关于使用Enum.IsDefined
的评论。表现明智,听起来很糟糕。我怎样才能保证有效价值?
答案 0 :(得分:65)
像这样:
return (T)(object)value;
答案 1 :(得分:17)
改变这个:
Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);
到此:
T value = (T)Enum.ToObject(enumType, enumAsInt);
并删除演员:)
答案 2 :(得分:0)
有关信息,可从C#7.3及更高版本中使用通用约束Enum
。