Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Switch语句包含多个具有相同标签值的大小写,但不包含';T_C#_Enums_Switch Statement_Syntax Error_Visual Studio 2019 - Fatal编程技术网

C# Switch语句包含多个具有相同标签值的大小写,但不包含';T

C# Switch语句包含多个具有相同标签值的大小写,但不包含';T,c#,enums,switch-statement,syntax-error,visual-studio-2019,C#,Enums,Switch Statement,Syntax Error,Visual Studio 2019,我有这个枚举: [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 MyEnu

我有这个枚举:

[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;
    }
}
现在我想在此枚举上使用一个开关:

[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;
    }
}
但我无法编译它,因为VisualStudio告诉我“switch语句包含多个带有标签值“0”的case”。我不知道为什么会这样


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

这是布尔异或运算符

异或或异或析取是一种逻辑运算,仅当输入不同时才输出true(一个为true,另一个为false)

所以
2^2
实际上是0

^运算符计算其整数操作数的位逻辑异或,也称为位逻辑异或

所以在位逻辑中
10xor 10=0

我的猜测是,你想使用2对2的幂,那么为什么不直接使用呢

[Flags]
public enum MyEnum
{
    NegativeValue = -1,
    Value0 = 0,
    Value1 = 2,
    Value2 = 4,
    Value3 = 8,
    Value4 = 16
}
您使用的是不将数字提升为幂的

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

也许您需要二进制文本:

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

我有时有超过30个条目的枚举,并且计算 写这些数字是在浪费时间

是的,只是

[标志]
公共枚举髓鞘
{
NegativeValue=-1,
值0=0,
值1=1,

Value2=2为什么你说2 ^ 2不是0?我想你有一些操作符可能是。我想把2写成2的幂,而通常的字符是正常的。我刚检查过,还有C++,java和C++也使用<代码> ^ < /> >按位异或。所以什么“正常”?你是从哪里来的?我在C#中从未使用过xor,我的意思是通常像在谷歌中一样,或者只是和其他人聊天。第一个对我来说真的很有帮助,谢谢!