HasFlag始终返回True

Sti*_*kly 3 c# enums

有办法检查我是否在一系列旗帜中有旗帜?

例:

[Flags]
Enum TestEnum
{
  ALIVE, DEAD, ALMOSTDEAD, HURT, OTHERS

}
// check if is alive and has been hurt
TestEnum aTest = TestEnum.ALIVE | TestEnum.HURT
bool aTest2 = aTest.HasFlag(TestEnum.ALIVE)
Run Code Online (Sandbox Code Playgroud)

a.Test.HasFlag即使没有TestEnum.ALIVE,总是返回true

Ice*_*ind 8

你当然可以像所有人一样建议使用Enum.HasFlag.但是,确保您的枚举属于两个权限非常重要.两个函数的权限设置为一位,因此您的枚举应如下所示:

Enum TestEnum
{
    ALIVE = 1, DEAD = 2, ALMOSTDEAD = 4, HURT = 8, OTHERS = 16
}
Run Code Online (Sandbox Code Playgroud)

这很重要的原因是因为您正在比较位标志.在内存中,你的枚举标志将如下所示:

ALIVE      = 00001
DEAD       = 00010
ALMOSTDEAD = 00100
HURT       = 01000
OTHERS     = 10000
Run Code Online (Sandbox Code Playgroud)

当你进行按位比较时,就像DEAD | ALMOSTDEAD这样:

DEAD       = 00010
           OR
ALMOSTDEAD = 00100
------------------
RESULT     = 00110
Run Code Online (Sandbox Code Playgroud)

由于结果>然后是0,它的真实性.

  • 在协助它们时,一个简单的方法就是使用`<<`运算符.`Enum TestEnum {ALIVE = 1 << 0,DEAD = 1 << 1,ALMOSTDEAD = 1 << 2,HURT = 1 << 3,OTHERS = 1 << 4} (4认同)