按位逻辑应该适用于这样的标志枚举。
if((Flow & (GameFlow.Normal | GameFlow.NormalNoMove)) > 0)
正如我在这里提到的,还可以创建结合其他值的枚举值。
所以,在你的情况下:
[Flags]
public enum GameFlow
{
Normal = 1,
NormalNoMove = 2,
Paused = 4,
Battle = 8,
AnyNormal = Normal | NormalNoMove
}
bool IsNormal(GameFlow flow)
{
return (flow & GameFlow.AnyNormal) > 0;
}
和一个 LINQPad 测试:
void Main()
{
IsNormal(GameFlow.Normal).Dump();// True
IsNormal(GameFlow.NormalNoMove).Dump();// True
IsNormal(GameFlow.Paused).Dump();// False
IsNormal(GameFlow.Battle).Dump();// False
IsNormal(GameFlow.Normal | GameFlow.Paused).Dump();// True
IsNormal(GameFlow.NormalNoMove | GameFlow.Battle).Dump();// True
IsNormal(GameFlow.Paused | GameFlow.Battle).Dump();// False
IsNormal(GameFlow.Battle | GameFlow.Normal).Dump();// True
}
根据您的评论,我想知道您是否也应该在这里修改按位标志。听起来“Normal”是您要检查的状态,“NormalNoMove”建立在此之上。也许你的枚举应该看起来更像这样:
[Flags]
public enum GameFlow
{
Normal = 1,
NormalNoMove = Normal | 2,
Paused = 4,
Battle = 8
}
这样,您可以检查是否flow & GameFlow.Normal > 0
处于正常状态:NormalNoMove
只是 "extends" Normal
,可以这么说。