带有和不带值的枚举

rel*_*sis 4 c# enums switch-statement

我有一个枚举和一个基于该枚举的switch语句,如下所示:

public enum MyEnum
    {
        VAL1,
        VAL2,
        VAL3,
        ONE = 1,
        TWO = 2
    }
Run Code Online (Sandbox Code Playgroud)

和开关:

switch ((MyEnum)Enum.Parse(typeof(MyEnum), input.ToUpper()))
        {
            case MyEnum.VAL1:
                Console.WriteLine("val1");
                break;
            case MyEnum.VAL2:
                Console.WriteLine("val2");
                break;
            case MyEnum.VAL3:
                Console.WriteLine("val3");
                break;
            case MyEnum.ONE:
                Console.WriteLine("1");
                break;
            default:
                Console.WriteLine("default");
                break;
        }
Run Code Online (Sandbox Code Playgroud)

其中input是一个字符串.我遇到的问题是我有编译器错误,

标签'case 1:'已经出现在switch语句中

我发现在枚举中首先移动'ONE'元素可以解决问题,但我的问题是为什么会发生这种情况?

The*_*One 6

好吧,因为当你有:

public enum MyEnum
    {
        VAL1,
        VAL2,
        VAL3,
        ONE = 1,
        TWO = 2
    }
Run Code Online (Sandbox Code Playgroud)

你基本上有:

public enum MyEnum
    {
        VAL1 = 0,
        VAL2 = 1,
        VAL3 = 2,
        ONE = 1,
        TWO = 2
    }
Run Code Online (Sandbox Code Playgroud)

你现在看到问题出在哪里了?您需要为它们分配不同的值.