![](/img/trans.png)
[英]C# - how do I check if a byte value matches against any flags in a specified flags enum?
[英]Comparing flags with flags - check for matches
说我有一个枚举:
[Flags]
public enum Alpha
{
NULL = 0,
A0 = 1,
A1 = 2,
A2 = 4,
A3 = 8
}
我有以下内容:
Alpha selected = A0 | A1 | A2
Alpha compare = A1 | A3
我想检查compare
标志中是否也有任何selected
的标志。
到目前为止,我能想到的唯一方法是(伪代码)
foreach(Alpha flag in Enum.GetValues(typeof(Alpha)))
{
if (selected.HasFlag(flag) && compare.HasFlag(flag))
{
return true
}
}
return false
有没有更多的逻辑方法可以做到这一点?
因为它被视为位字段,所以您可以以相同的方式使用它。
指示可以将枚举视为位字段; 也就是说,一组标志
bool result = (selected & compare) > 0; // First solution
bool result2 = (selected & compare).Any(); // Second solution
您可能需要的是:
(selected & compare) > 0;
当您使用AND
运算符时,两个操作数之间共有的任何标志都会出现在结果中。
然后,您只需要比较一下,看看结果是否大于零:
bool anySelected = (selected & compare) > 0;
我认为首先您应该从Alpha中删除NULL
,然后返回(selected & compare) != 0
, anyEnum.HasFlag(Alpha.NULL)
将始终是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.