首页 > 解决方案 > Switch 语句包含具有相同标签值的多个案例,但不包含

问题描述

我有这个枚举:

[Flags]
public enum MyEnum
{
    NegativeValue = -1,
    Value0 = 0,
    Value1 = 2 ^ 1,
    Value2 = 2 ^ 2,
    Value3 = 2 ^ 3,
    Value4 = 2 ^ 4
}

现在我想在这个枚举上使用一个开关:

public void SwitchThroughEnum(MyEnum myEnum)
{
    switch (myEnum)
    {
        case MyEnum.NegativeValue:
            break;
        case MyEnum.Value0:
            break;
        case MyEnum.Value1:
            break;
        case MyEnum.Value2:
            break;
        case MyEnum.Value3:
            break;
        case MyEnum.Value4:
            break;
        default:
            break;
    }
}

但我无法编译它,因为 Visual Studio 告诉我“switch 语句包含标签值为 '0' 的多个案例”。我不知道为什么会这样。

在此处输入图像描述

编辑:是否有可能以仅使用 1、2 等的力量的方式创建枚举?我有时有超过 30 个条目的枚举,计算和写入数字是浪费时间

标签: c#enumsswitch-statementsyntax-errorvisual-studio-2019

解决方案


您正在使用逻辑异或运算符 ^而不是将数字提高到幂。

C# 没有幂运算符,你不能使用Math.Pow它,因为它不是一个常量,而且它返回一个double.

也许你想要二进制文字:

public enum MyEnum
{
    NegativeValue = -1,
    Value0 = 0,
    Value1 = 0b0000001,
    Value2 = 0b0000010,
    Value3 = 0b0000100,
    Value4 = 0b0001000,
}

或者

public enum MyEnum
{
    NegativeValue = -1,
    Value0 = 0,
    Value1 = 1,
    Value2 = 2,
    Value3 = 4,
    Value4 = 8,
}

推荐阅读