[英]How to make [Flags] enum and switch case work together?
如何使[Flags]枚举和切换大小写一起工作? 非常希望使它看起来简单。 多次问过类似问题,但从来没有直接问过[Flags]枚举。
如果设置了M1,则执行操作1,
如果M2设置为执行operation2,
如果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
,因为一旦执行了一种情况,就不会再执行其他情况。
您可以将switch
语句视为书写if... else if... else...
一种较短方法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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.