Лучшее, что вы сможете сделать, это:
bool TryGetEnum<TEnum>(Object value, out TEnum myEnum)
{
myEnum = default(TEnum);
if (Enum.IsDefined(typeof(TEnum), value))
{
myEnum = (TEnum)value;
return true;
}
return false;
}
С вариантом использования, который выглядит примерно так:
MyEnum mye;
bool success = this.TryGetEnum<MyEnum>(2, out mye);
Вы не сможете сделать тип ввода универсальным, поскольку нет доступных общих ограничений для использования, которые позволили бы вам гарантировать, что TEnum
использует TValue
в качестве базового типа.
Кроме того (в качестве примечания) C # позволяет использовать только следующие типы в качестве базового значения для enum
:
byte
sbyte
short
ushort
int
uint
long
ulong