18

列挙型がある場合

    [Flags]
    public enum GameFlow
    {
        Normal = 1,
        NormalNoMove = 2,
        Paused = 4,
        Battle = 8
    }

単一のチェックで列挙型が目的の状態のいずれかにあるかどうかを確認することは可能ですか? たとえば、enum が Normal か NormalNoMove かどうかを確認したい場合、常にこのように記述する必要がありますか?

if(Flow == GameFlow.Normal || Flow == GameFlow.NormalNoMove)

値が 2 つしかない場合は大きな問題ではありませんが、列挙型の状態が増えるため、1 か所だけ変更すればよいと考えています。列挙値がNormalまたはNormalNoMoveの場合にtrueを返す列挙エイリアスを作成することは何とか可能ですか? または、それを達成するためにある種のヘルパーメソッドを作成する必要がありますか(拡張メソッド?)

4

6 に答える 6

4

@StringlingWarrior の回答へのコメントに基づいて、コードを短縮する拡張メソッドを作成できます。

public static class GameFlowExtensions
{
    public static bool IsNormal(this GameFlow flow)
    {
        return (flow & (GameFlow.Normal | GameFlow.NormalNoMove)) > 0;
    }
}

// usage:
if (Flow.IsNormal()) 
于 2013-08-01T18:12:02.843 に答える
1

次のように、変数を等しい値に設定し、その値GameFlow.NormalGameFlow.NormalNoMove比較することができます。

GameFlow NormalOrNormalNoMove = GameFlow.Normal | GameFlow.NormalNoMove;
...
if ((Flow & NormalOrNormalNoMove) > 0)
{
    // Your code
}
于 2013-08-01T18:14:16.943 に答える