有办法检查我是否在一系列旗帜中有旗帜?
例:
[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
你当然可以像所有人一样建议使用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,它的真实性.