比较标志与标志 - 检查匹配
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
我想检查 selected
标志是否也在 compare
标志中。
到目前为止我能想到的唯一方法是(伪代码)
foreach(Alpha flag in Enum.GetValues(typeof(Alpha)))
{
if (selected.HasFlag(flag) && compare.HasFlag(flag))
{
return true
}
}
return false
有没有更合乎逻辑的方法来做到这一点?
因为它被视为位域,所以你可以用同样的方式使用它。
Indicates that an enumeration can be treated as a bit field; that is,
a set of flags
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
,然后 return (selected & compare) != 0
,anyEnum.HasFlag(Alpha.NULL)
将永远是正确的。
假设我有一个枚举:
[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
有没有更合乎逻辑的方法来做到这一点?
因为它被视为位域,所以你可以用同样的方式使用它。
Indicates that an enumeration can be treated as a bit field; that is, a set of flags
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
,然后 return (selected & compare) != 0
,anyEnum.HasFlag(Alpha.NULL)
将永远是正确的。