2011-12-30 5 views
0

(私はこれは私が達成したい何のために右の説明であると思います - タイトルを変更して自由に感じる)列挙型の入れ子ですか?

私は別のGameStatesを持っている、小さなゲームを作ってるんです。通常、私はこれらをenumに入れます。しかし今回は次のようにしたい:

enum GameState 
{ 
    Menu 
    Game.Playing 
    Game.Paused 
    ... 
} 

明らかにうまくいかない。これをどうすれば解決できますか?

+0

はGame'別の列挙 'ですか? – Marlon

+0

何を解決しますか?ここで解決しようとしている_exact_問題を説明してください。 – Oded

+1

交換してください。おそらく? –

答えて

3

は本当にですか?それとも、ただ、あなたが実際にいくつかの先進的な行動が必要な場合は、クラスで構成された、よりインテリジェントな列挙型、およびサブクラスが必要になるだろう

enum GameState 
{ 
    Menu 
    Game_Playing 
    Game_Paused 
    ... 
} 

を使用することができます。次のようなもの:

abstract class GameState { } 
class Menu : GameState { } 
class Game : GameState 
{ 
    private class _Playing : GameState { } 
    private class _Paused : GameState { } 

    static readonly GameState Playing = new _Playing(); 
    static readonly GameState Paused = new _Paused(); 
} 

これは本当に価値がありますか?

+0

答えをありがとう。今私はそれについて考えて、それは愚かな質問だったと私は確かにこのようにそれを解決することができます。 –

+1

私は、この行がペーストされた後に完全に編集されなかったと思います: 'static readonly GameState Paused = new _Playing();' – phoog

+0

@phoogありがとう、修正済み。 –

0

ネストした列挙型を定義することはできませんが、クラス内に複数の列挙型を使用できますが、ツリー構造にはなりません。

public static class GameState 
{ 
    public enum Game { 
     Playing, 
     Paused, 
     ,etc.. 
    } 

    public enum Menu { 
     Menu1, 
     Menu2 
    } 
} 
2

が直接これを行う方法はありませんが、あなたは、ネストされたstaticクラスとネストされた列挙型を「シミュレート」することができます。

シンプルだが、厳密に型指定されていないアプローチ:

static class GameState 
{ 
    public const int Menu = 0; 

    public static class Game 
    { 
     public const int Playing = 1; 
     public const int Paused = 2; 
    } 
}