2011-12-30 1 views
0

(я надеюсь, что это верно описание, для чего я хочу достичь - не стесняйтесь, чтобы изменить название)Вложение в Enum?

Я делаю небольшую игру, которая будет иметь различные 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

Вы не можете определить вложенный Enum, но вы можете использовать множественные перечисления внутри класса, но это не будет похоже на древовидную структуру.

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; 
    } 
}