我可以从一个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);
并删除演员:)