如何使[标志]枚举和切换大小写一起工作?非常希望让它看起来很简单。类似的问题问了很多次,但从未直接针对[标志]枚举。
如果 M1 设置执行操作 1,
如果 M2 设置执行操作2 ,
如果 M1 和 M2 都设置执行操作 1 和 2。
[Flags]
public enum TST
{
M1 =1,
M2 =2,
M3 =4
}
public void PseudoCode()
{
TST t1 = TST.M1 | TST.M3; //1+2= 3
switch( t1)
{
case TST.M1:
{
//Do work if Bit 1 set
}
case TST.M2:
{
//Do work if Bit 2 set
}
case TST.M3:
{
//Do work if Bit 3 set
}
default:
{
//nothing set;
break;
}
}
}
我也非常确定很多人想知道如何让它工作。请求修复 C#?
这将对任何位集执行
例如
ExecuteOnFlagValue(TST.M1 | TST.M3); //1+2= 3
将执行位 1 和 3 的代码
public void ExecuteOnFlagValue(TST value) {
if (value & TST.M1 == TST.M1) {
//Do work if bit 1
}
if (value & TST.M2 == TST.M2) {
//Do work if bit 2
}
if (value & TST.M3 == TST.M3) {
//Do work if bit 3
}
}
你不能在 c# 中使用switch
来做到这一点,因为一旦执行了一个案例,就不会执行其他案例。
你可以将switch
语句视为编写if... else if... else...
构造的较短方法 - 其中每个case
都是一个if
,default
是最终else
:
这意味着以下switch
语句:
switch( t1)
{
case TST.M1:
//Do work if Bit 1 set
break;
case TST.M2:
//Do work if Bit 2 set
break;
case TST.M3:
//Do work if Bit 3 set
break;
default:
//nothing set;
break;
}
等效于以下if...else if... else
构造:
if(t1 == TST.M1)
{
//Do work if only Bit 1 set
}
else if (t1 == TST.M2)
{
//Do work if only Bit 2 set
}
else if (t1 == TST.M3)
{
//Do work if only Bit 3 set
}
else
{
//nothing set or multiple bits set
}