c# - 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# 没有幂运算符,你不能使用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,
}
推荐阅读
- javascript - 如果单击了上一页上的按钮,则自动滚动
- excel-formula - 如何根据excel中的过滤器计算行数?
- ios - 应用程序仅适用于 iPhone(Plus 型号)
- reactjs - NativeBase 与 Animated.ScrollView 的奇怪行为
- javascript - 将来自 axios.post 的响应插入状态
- android - Kotlin Coroutine Main Looper Android
- git - 修改最后一次提交消息后的 GitHub 额外贡献/提交
- java - cassandra 中的自定义列类型:数组列表
- memory-management - 解释器的堆能否以某种方式比使用向量更有效地实现?
- neo4j - 我在使用 Neo4j 非托管服务器扩展执行 Cypher 查询时遇到了这个异常“org.neo4j.graphdb.TransactionTerminatedException”