Перебирать enum? - PullRequest
       17

Перебирать enum?

24 голосов
/ 13 апреля 2010

Я пытаюсь перебрать перечисление и вызвать метод, используя каждое из его значений в качестве параметра. Должен быть лучший способ сделать это, чем у меня сейчас:

foreach (string gameObjectType in Enum.GetNames(typeof(GameObjectType)))
{
     GameObjectType kind = (GameObjectType) Enum.Parse(typeof (GameObjectType), gameObjectType);
     IDictionary<string, string> gameObjectData = PersistentUtils.LoadGameObject(kind, persistentState);
}

//...

public static IDictionary<string, string> LoadGameObject(GameObjectType gameObjectType, IPersistentState persistentState) { /* ... */ }

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

Ответы [ 2 ]

34 голосов
/ 13 апреля 2010

Ну, вы можете использовать Enum.GetValues:

foreach (GameObjectType type in Enum.GetValues(typeof(GameObjectType))
{
    ...
}

Хотя это не сильно напечатано - а IIRC довольно медленно.Альтернативой является использование моего проекта UnconstrainedMelody :

// Note that type will be inferred as GameObjectType :)
foreach (var type in Enums.GetValues<GameObjectType>())
{
    ...
}

UnconstrainedMelody хорош, если вы много работаете с перечислениями, но это может быть излишним для одного использования..

2 голосов
/ 01 ноября 2011

На всякий случай, если кто-то еще достаточно сумасшедший, чтобы захотеть сделать хочет сделать это в C ++ / CLI, вот порт, который работает:

using namespace System;

enum class GameObjectType
{
    num1 = 1,
    num2 = 2,
};

Array^ objectTypes = Enum::GetValues(GameObjectType::typeid);
for each( GameObjectType^ objectType in objectTypes)
{
    // Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...