C# 如何检查一个枚举标志是否与另一个枚举同时出现?
我有以下枚举:C# 如何检查一个枚举标志是否与另一个枚举同时出现?,c#,.net,enums,flags,C#,.net,Enums,Flags,我有以下枚举: [Flags] public enum Permissions { None = 0x0000, All = 0xFFFF } 如果没有或全部升起,则不应升起其他标志。 如何检查是否引发了None或All而没有其他内容?在标志枚举中,None应为零,All应为累积位和。这使得数学很容易,那么: if(value == Permissions.None || value == Permissions.All) {...} 如果您愿意,可以将其编写为开关 但是,在
[Flags]
public enum Permissions
{
None = 0x0000,
All = 0xFFFF
}
如果没有或全部升起,则不应升起其他标志。如何检查是否引发了None或All而没有其他内容?在标志枚举中,
None
应为零,All
应为累积位和。这使得数学很容易,那么:
if(value == Permissions.None || value == Permissions.All) {...}
如果您愿意,可以将其编写为开关
但是,在一般情况下,您可以使用以下各项测试完整的标志匹配(针对任意数量的位):
为了测试任何重叠(即,任何公共位-需要
需要非零):
这可以检查权限。未引发任何权限。其余部分也可以用相同的方式完成。您没有正确使用
标志
属性。该属性用于实现为位掩码的枚举,如果您的枚举是位掩码,那么您就不需要问这个问题,因为None
将是0
,All
将是0xFFFF
。如果正确使用使用标志,则没有一个将具有掩码0000…0,所有将具有掩码1111…1,这意味着All
对应于设置的所有标志,None
对应于设置的无标志。谢谢!这对我来说是一个完全陌生的概念,但却是语言的一个非常酷的特征。谢谢你的澄清。在Java中从来没有做过很多事情:)
if((value & wanted) == wanted) {...}
if((value & wanted) != 0) {...}
if(value|Permissions.None)==Permissions.None;