如果我有:
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#将如何解释结果。我认为这个特定用例可能存在重写或者无论如何,我已经看过在几个地方使用过,而不知道作者究竟打算做什么。
答案 0 :(得分:6)
按位或按两个值设置不同的位将创建一个设置了两个位的值,因此它看起来像 您可以使用枚举的0x011
。该值不等于 或 B.它在概念上代表两者而不是 。< / p>
HasFlag
方法来确定parituclar值是否设置了其中一个标志。因此,要确定特定值是否设置了A或B,您需要编写:public static bool HasAOrBSet(MyEnum e)
{
return e.HasFlag(MyEnum.A) || e.HasFlag(MyEnum.B);
}