我可以从泛型类型转换为C#中的枚举吗?

时间:2010-07-15 23:06:43

标签: c# generics casting enums

我正在编写一个实用程序函数,它从数据库中获取一个整数,并将一个类型化的枚举返回给应用程序。

这是我尝试做的事情(注意我在实际函数中传入了数据读取器和列名而不是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的评论。表现明智,听起来很糟糕。我怎样才能保证有效价值?

3 个答案:

答案 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