Можно ли привести тип из обобщенного типа к перечислению в C #? - PullRequest
43 голосов
/ 16 июля 2010

Я пишу служебную функцию, которая получает целое число из базы данных и возвращает типизированное перечисление в приложение.

Вот что я пытался сделать (обратите внимание, я передаю данные для чтения и имя столбцавместо 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'to' T '.

Также я прочитал довольно много смешанных отзывов об использовании Enum.IsDefined.Производительность звучит очень плохо.Как еще я могу гарантировать действительное значение?

Ответы [ 3 ]

65 голосов
/ 16 июля 2010

Как это:

return (T)(object)value;
17 голосов
/ 16 июля 2010

Изменить это:

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

к этому:

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

и снимите литой:)

0 голосов
/ 14 мая 2019

Информацию об использовании общего ограничения Enum можно получить из C # 7.3 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...