按位邏輯應該在標誌枚舉上工作,像這樣。
if((Flow & (GameFlow.Normal | GameFlow.NormalNoMove)) > 0)
它也可以創建結合其他值,因爲我提here枚舉值。
所以,你的情況:
[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
}
基於您的評論,我想知道,如果你要在這裏修改按位標誌,太。這聽起來像「正常」是你想檢查的狀態,「NormalNoMove」建立在此。也許你應該枚舉看起來更像是這樣的:
[Flags]
public enum GameFlow
{
Normal = 1,
NormalNoMove = Normal | 2,
Paused = 4,
Battle = 8
}
這樣的話,你可以檢查是否flow & GameFlow.Normal > 0
,看看你在任何正常狀態:NormalNoMove
只是「擴展」 Normal
,可以這麼說。
我想Flow是GameFlow類型的? –
是的,它是GameFlow類型 – kasztelan