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

时间:2015-11-20 12:06:51

标签: c# enums comparison enum-flags

说我有一个枚举:

[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

是否有更多逻辑方法可以做到这一点?

4 个答案:

答案 0 :(得分:2)

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

FlagsAttribute Class

  

表示可以将枚举视为位字段;那是,   一组标志

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