繁体   English   中英

如何使[Flags]枚举和切换大小写一起工作?

[英]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都是ifdefault是最终的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM