C# 如何将作为泛型参数的枚举转换为另一个枚举?

C# 如何将作为泛型参数的枚举转换为另一个枚举?,c#,.net,generics,enums,type-conversion,C#,.net,Generics,Enums,Type Conversion,我有一些枚举 enum BasicEnum { BasicValue1, BasicValue2 //... } 我想要的是类似于 public void Foo<TEnum>(TEnum someEnum) where TEnum : struct, IComparable, IFormattable, IConvertible { switch (someEnum) { case BasicEnum.BasicVa

我有一些枚举

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”

要找到像这样的把戏并不难

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

但这个解决方案似乎不是我非常喜欢的。有更好的办法吗

它不是最漂亮的,但您可以使用(添加适当的铸造检查):

使用:


如果我了解您需要什么,我会选择
var success=BasicEnum.TryParse(someEnum.ToString(),out BasicEnum)

给出以下枚举

public enum FirstEnum
{
    FirstEnum1,
    FirstEnum2,
    FirstEnum3
}

public enum SecondEnum
{
    SecondEnum1,
    SecondEnum2,
    SecondEnum3
}
可以通过执行以下操作将第二个枚举强制转换为第一个枚举

SecondEnum secEnum = SecondEnum.SecondEnum2;

FirstEnum firstEnum = (FirstEnum)Enum.ToObject(typeof(FirstEnum), secEnum);
firstEnum
现在将等于
FirstEnum2

您还可以创建一个通用方法,将枚举转换为基本类型(即FirstEnum)

并按如下方式调用该函数:

FirstEnum firstEnum = ConvertToFirstEnum(SecondEnum.SecondEnum3);

firstEnum
的值将等于
FirstEnum3

try parse是枚举类上的一个静态方法。它不能用于BasicEnumno我不认为有更好的方法。演员阵容无法避免。最多可以考虑使用<代码> TyPARSE < /代码>。代码>Enum.TryParse(someEnum.ToString(),out basicValue)似乎比Convert.ToInt好
public enum FirstEnum
{
    FirstEnum1,
    FirstEnum2,
    FirstEnum3
}

public enum SecondEnum
{
    SecondEnum1,
    SecondEnum2,
    SecondEnum3
}
SecondEnum secEnum = SecondEnum.SecondEnum2;

FirstEnum firstEnum = (FirstEnum)Enum.ToObject(typeof(FirstEnum), secEnum);
public FirstEnum ConvertToFirstEnum(object enumToConvert)
{
    FirstEnum value = (FirstEnum)Enum.ToObject(typeof(FirstEnum), enumToConvert);
    return value;
}
FirstEnum firstEnum = ConvertToFirstEnum(SecondEnum.SecondEnum3);