我在写一个实用程序函数,它从数据库中获取一个整数,并将一个枚举的枚举返回给应用程序。我可以从泛型类型转换为C#中的枚举吗?
这里是我试图做(注意我通过在数据读取器和列名称,而不是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
的混合评论。表现明智,听起来很差。我还能如何保证有效的价值?
注意,如果情形是换句话说,你必须做'(Enum)v alue'并且你得到'不能将类型'T'转换为'System.Enum',你可以只做一个'''''''',就像'Enum'一样。 – nawfal 2013-06-09 13:07:10
不正确(至少在我的情况下),你会得到旧的'as运算符必须与引用或可为空的类型('Foo.bar'是不可为空值的类型)一起使用的错误。 – keithl8041 2014-02-10 12:54:54