如何在值共享相同名称的枚举之间进行转换?

Bla*_*ght 11 c# enums

如果我想在两种Enum类型之间进行转换,我希望它们的值具有相同的名称,是否有一个简洁的方法,或者我必须这样做:

enum colours_a { red, blue, green }
enum colours_b { yellow, red, blue, green }

static void Main(string[] args)
{
    colours_a a = colours_a.red;
    colours_b b;

    //b = a;
    b = (colours_b)Enum.Parse(typeof(colours_b), a.ToString());
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*lay 6

如果您对这两个枚举有严格的控制权,那么您的解决方案(或Randolpho)就可以了.

如果你不这样做,那么我会跳过尝试变得棘手并创建一个在它们之间进行转换的静态映射类.事实上,我可能会建议,从易于维护的角度来看,无论如何(即使你现在按名称进行映射).


Joã*_*elo 5

您也可以这样做,不知道它是否足够整洁:

enum A { One, Two }

enum B { Two, One }

static void Main(string[] args)
{
    B b = A.One.ToB();
}
Run Code Online (Sandbox Code Playgroud)

当然,这需要扩展方法:

static B ToB(this A a)
{
    switch (a)
    {
        case A.One:
            return B.One;
        case A.Two:
            return B.Two;
        default:
            throw new NotSupportedException();
    }
}
Run Code Online (Sandbox Code Playgroud)