我在寫一個實用程序函數,它從數據庫中獲取一個整數,並將一個枚舉的枚舉返回給應用程序。我可以從泛型類型轉換爲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