将标志与标志进行比较-检查是否匹配

本文关键字:标志 检查 是否 比较 | 更新日期: 2023-09-27 18:22:48

假设我有一个枚举:

[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

有更合乎逻辑的方法吗?

将标志与标志进行比较-检查是否匹配

因为它被视为位字段,所以您可以以相同的方式使用它。

FlagsAttribute类

指示枚举可以被视为位字段;即,的一组标志

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) != 0anyEnum.HasFlag(Alpha.NULL)将始终为true。