说我有一个枚举:
[Flags]
public enum Alpha
{
NULL = 0,
A0 = 1,
A1 = 2,
A2 = 4,
A3 = 8
}
我有以下内容:
Alpha selected = A0 | A1 | A2
Alpha compare = A1 | A3
我想检查selected
标志中是否还有compare
个标志。
到目前为止,我能想到的唯一方法是(伪代码)
foreach(Alpha flag in Enum.GetValues(typeof(Alpha)))
{
if (selected.HasFlag(flag) && compare.HasFlag(flag))
{
return true
}
}
return false
是否有更多逻辑方法可以做到这一点?
答案 0 :(得分:2)
因为它被视为位字段,所以您可以以相同的方式使用它。
表示可以将枚举视为位字段;那是, 一组标志
bool result = (selected & compare) > 0; // First solution
bool result2 = (selected & compare).Any(); // Second solution
答案 1 :(得分:1)
你需要的可能是:
(selected & compare) > 0;
答案 2 :(得分:1)
使用AND
运算符时,结果中将出现两个操作数之间通用的任何标志。
然后你只需要比较并查看结果是否大于零:
bool anySelected = (selected & compare) > 0;
答案 3 :(得分:1)
我认为首先你应该从Alpha移除NULL
,然后只返回(selected & compare) != 0
,anyEnum.HasFlag(Alpha.NULL)
将始终是真的。