我有一些枚举

enum BasicEnum
{
    BasicValue1,
    BasicValue2
    //...
}


我想拥有的东西类似于

public void Foo<TEnum>(TEnum someEnum)
    where TEnum : struct, IComparable, IFormattable, IConvertible
{
    switch (someEnum)
    {
        case BasicEnum.BasicValue1:
            //...
            break;
        case BasicEnum.BasicValue2:
            //...
            break;
    }
}


所有TEnum类型仅包含BasicEnum中存在的值。

当然,此类代码不会被编译,因此我尝试将其更改为:

public void Foo<TEnum>(TEnum someEnum)
    where TEnum : struct, IComparable, IFormattable, IConvertible
{
    BasicEnum basicEnum = (BasicEnum)someEnum;

    switch (basicEnum)
    {
        //...
    }
}


如预期的那样,我再次遇到错误``无法将类型'TEnum'转换为'BasicEnum''

找到这样的把戏并不难

var value = Convert.ToInt32(someEnum);
var basicValue = (BasicEnum)value;


但是这种解决方案似乎并不是我最喜欢的解决方案。有没有更好的办法?

最佳答案

使用:

( BasicEnum )Enum.ToObject( typeof( BasicEnum ), someEnum )

关于c# - 如何将作为通用参数的Enum转换为另一个Enum?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20245130/

10-11 02:12