Я пишу функцию утилиты, которая получает целое число из базы данных и возвращает типизированное перечисление в приложение.
Вот что я пытался сделать (обратите внимание, что я передаю имя считывателя данных и имя столбца вместо 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
. Производительность звучит очень плохо. Как еще я могу гарантировать допустимое значение?