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

时间:2011-05-30 20:04:57

标签: c# .net enums flags

我有以下枚举:

[Flags]
public enum Permissions
{
    None = 0x0000,
    All = 0xFFFF
}

如果引发None或All,则不应引发其他标志 如何检查是否提出了None或All,还是没有其他内容?

2 个答案:

答案 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被引发。其余的可以用同样的方式完成。