我想这样做,但它不起作用。
bool TryGetEnum<TEnum, TValue>(TValue value, out TEnum myEnum)
{
value = default(TEnum);
if (Enum.IsDefined(typeof(TEnum), value))
{
myEnum = (TEnum)value;
return true;
}
return false;
}
使用示例:
MyEnum mye;
bool success = this.TryGetEnum<MyEnum,char>('c',out mye);
答案 0 :(得分:4)
尝试以下
myEnum = (TEnum)((object)value);
答案 1 :(得分:2)
你能做的最好的就是:
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
作为其基础类型。< / p>
此外,(作为附注)C#仅允许以下类型用作enum
的基础值:
byte
sbyte
short
ushort
int
uint
long
ulong