如何检查枚举标志是否与另一个枚举一起出现?

the*_*row 2 .net c# enums flags

我有以下枚举:

[Flags]
public enum Permissions
{
    None = 0x0000,
    All = 0xFFFF
}
Run Code Online (Sandbox Code Playgroud)

如果引发None或All,则不应引发其他标志.
如何检查无或全部是否被引发而没有其他内容?

Mar*_*ell 6

在标志枚举中,None应该为零,并且All应该是累积的按位总和.这使数学很容易,然后:

if(value == Permissions.None || value == Permissions.All) {...}
Run Code Online (Sandbox Code Playgroud)

switch如果你愿意,可以写成a ...

但是,在一般情况下,您可以使用以下命令测试完整的标志匹配(针对任意数量的位):

if((value & wanted) == wanted) {...}
Run Code Online (Sandbox Code Playgroud)

并测试任何重叠(即任何公共位 - wanted需要非零):

if((value & wanted) != 0) {...}
Run Code Online (Sandbox Code Playgroud)