有没有办法让ToEnum成为通用的

时间:2010-03-25 20:13:30

标签: c# generics enums

我想这样做,但它不起作用。

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);

2 个答案:

答案 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
  •