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,我的意思是通常像在谷歌中一样,或者只是和其他人聊天。第一个对我来说真的很有帮助,谢谢!