有没有办法检查我是否在一系列标志中获得了标志?
Example:
[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)
But a.Test.HasFlag
始终返回 true,即使没有 TestEnum.ALIVE
你当然可以使用枚举HasFlag就像每个人都建议的那样。但是,重要的是要确保您的枚举是 2 的幂。 2 的幂有一个位设置,因此您的枚举应如下所示:
Enum TestEnum
{
ALIVE = 1, DEAD = 2, ALMOSTDEAD = 4, HURT = 8, OTHERS = 16
}
这很重要的原因是因为您正在比较位标志。在内存中,您的枚举标志将如下所示:
ALIVE = 00001
DEAD = 00010
ALMOSTDEAD = 00100
HURT = 01000
OTHERS = 10000
当您进行按位比较时,例如DEAD | ALMOSTDEAD
,你正在这样做:
DEAD = 00010
OR
ALMOSTDEAD = 00100
------------------
RESULT = 00110
因为结果 > 然后 0,所以它是真的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)