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

时间:2018-09-12 08:40:18

标签: c# enums switch-statement bitflags

如何使[Flags]枚举和切换大小写一起工作?非常希望使它看起来简单。多次问过类似问题,但从未直接向[标志]枚举问过。

如果设置了M1,则执行操作1,

如果设置了M2,则执行operation2,

如果同时将M1和M2设置为执行操作1和2。

private bool isNeutralLanguage(string entry)
{
    bool neutral = true;
     var match = dict.FirstOrDefault(stringToCheck => stringToCheck.Contains(entry.ToLower()));
     if (match != null && match.Any())
        neutral = false;
     return neutral;
}

我也很确定很多人都想知道如何使其工作。要求修复C#?

2 个答案:

答案 0 :(得分:3)

这将对任何设置的位执行

例如

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
    }
}

答案 1 :(得分:0)

您无法在c#中使用switch来执行此操作,因为一旦执行了一种情况,就不会再执行其他情况。
您可以认为switch语句是编写if... else if... else...构造的一种较短方法-每个caseif,而default是最后的{ {1}}:

这意味着以下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