我有以下枚举:
[Flags]
public enum Permissions
{
None = 0x0000,
All = 0xFFFF
}
如果引发None或All,则不应引发其他标志 如何检查是否提出了None或All,还是没有其他内容?
答案 0 :(得分:6)
在标志枚举中,None
应为零,All
应为累积按位总和。这使数学很容易,然后:
if(value == Permissions.None || value == Permissions.All) {...}
如果您愿意,可以写成switch
......
但是,在通用情况下,您可以测试完整的标志匹配(针对任意数量的位):
if((value & wanted) == wanted) {...}
并测试任何重叠(即任何公共位 - wanted
必须为非零):
if((value & wanted) != 0) {...}
答案 1 :(得分:0)
if(value|Permissions.None)==Permissions.None;
这可以检查Permissions.None被引发。其余的可以用同样的方式完成。