如何使 [Flags] enum 和 switch case 一起工作?
How to make [Flags] enum and switch case work together?
如何让 [Flags] enum 和 switch case 协同工作?非常希望让它看起来简单。多次询问类似问题,但从未直接针对 [Flags] 枚举。
如果M1设置执行操作1,
如果M2设置执行操作2,
if BOTH M1 and M2 then set execute operation 1 and 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#?
你不能用 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
}
这将对任何位设置执行
例如
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
}
}
如何让 [Flags] enum 和 switch case 协同工作?非常希望让它看起来简单。多次询问类似问题,但从未直接针对 [Flags] 枚举。
如果M1设置执行操作1,
如果M2设置执行操作2,
if BOTH M1 and M2 then set execute operation 1 and 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#?
你不能用 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
}
这将对任何位设置执行
例如
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
}
}