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

tob*_*777 0 c#

如果我有 :

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

MyEnum MyProp {get; set;}

// ....
Run Code Online (Sandbox Code Playgroud)

而我在某处做:

bool isTrue = MyProp == (A | B)
Run Code Online (Sandbox Code Playgroud)

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

bool istrue = MyProp == A || MyProp == B.
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下| 是按位运算符,但我想知道C#将如何解释结果.我想这个特定的用例可能会有一些覆盖或者无论如何我曾经在几个地方使用过,而不知道作者究竟打算做什么.

Ser*_*rvy 6

对每个具有不同位设置的按位或两个值执行将创建一个具有两个位设置的值,因此它看起来像0x011.该值是不会为等于或者 B.它概念性地表示这两种任一.

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

public static bool HasAOrBSet(MyEnum e)
{
    return e.HasFlag(MyEnum.A) || e.HasFlag(MyEnum.B);
}
Run Code Online (Sandbox Code Playgroud)