可以使用myEnum ==(A | B)代替myEnum == A || myEnum == B.

时间:2015-05-27 16:06:15

标签: c#

如果我有:

public enum MyEnum
{
    A = 0x01,
    B = 0x10,
    C = 0x100
}

MyEnum MyProp {get; set;}

// ....

我在某处做:

bool isTrue = MyProp == (A | B)

我想知道这是否可以用作以下的快捷方式:

bool istrue = MyProp == A || MyProp == B.

我知道在这种情况下|是按位运算符,但我想知道C#将如何解释结果。我认为这个特定用例可能存在重写或者无论如何,我已经看过在几个地方使用过,而不知道作者究竟打算做什么。

1 个答案:

答案 0 :(得分:6)

按位或按两个值设置不同的位将创建一个设置了两个位的值,因此它看起来像0x011。该值不等于 B.它在概念上代表两者而不是 。< / p>

您可以使用枚举的HasFlag方法来确定parituclar值是否设置了其中一个标志。因此,要确定特定值是否设置了A或B,您需要编写:

public static bool HasAOrBSet(MyEnum e)
{
    return e.HasFlag(MyEnum.A) || e.HasFlag(MyEnum.B);
}