【发布时间】:2010-07-15 23:06:42
【问题描述】:
我正在编写一个实用函数,它从数据库中获取一个整数并将一个类型化的枚举返回给应用程序。
这是我尝试做的(注意我在我的真实函数中传递了一个数据读取器和列名而不是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)value并且您得到Cannot convert type 'T' to 'System.Enum',您可以只执行as转换,例如value as Enum。 -
不是真的(至少在我的情况下),你会得到旧的'as 运算符必须与引用或可为空的类型一起使用('Foo.bar' 是不可为空的值类型)错误.