Вложение в Enum? - PullRequest
       4

Вложение в Enum?

0 голосов
/ 31 декабря 2011

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

Я делаю небольшую игру, в которой будут другие GameStates . Обычно я бы поместил их в enum. Но на этот раз я хочу сделать следующее:

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

Что, очевидно, не работает. Как я могу решить это?

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

Действительно ли действительно необходимо?Или вы можете просто использовать

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

Это действительно того стоит?

2 голосов
/ 31 декабря 2011

Нет способа сделать это напрямую, но вы можете "смоделировать" вложенные перечисления с помощью вложенных static классов.

Простой, но не строго типизированный подход:

static class GameState
{
    public const int Menu = 0;

    public static class Game
    {
        public const int Playing = 1;
        public const int Paused = 2;
    }
}
0 голосов
/ 31 декабря 2011

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

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

    public enum Menu {
        Menu1,
        Menu2
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...