Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查一个枚举标志是否与另一个枚举同时出现?_C#_.net_Enums_Flags - Fatal编程技术网

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;