我可以从一个genericstypes转换为C#中的枚举吗?

我正在写一个实用程序函数,从数据库中获取一个整数,并返回一个types的枚举到应用程序。

这是我试图做的(注意我传入一个数据读取器和列名称,而不是在我的真实函数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

无法将types“System.Enum”转换为“T”。

另外我读了很多有关使用Enum.IsDefined的综合评论。 性能明智,这听起来很差。 我还能如何保证有效的价值?

喜欢这个:

 return (T)(object)value; 

改变这个:

 Enum value = (Enum)Enum.ToObject(enumType, enumAsInt); 

对此:

 T value = (T)Enum.ToObject(enumType, enumAsInt); 

并删除演员:)