the*_*row 2 .net c# enums flags
我有以下枚举:
[Flags]
public enum Permissions
{
None = 0x0000,
All = 0xFFFF
}
Run Code Online (Sandbox Code Playgroud)
如果引发None或All,则不应引发其他标志.
如何检查无或全部是否被引发而没有其他内容?
在标志枚举中,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)