我正在尝试迭代枚举,并使用每个值作为参数调用方法。必须有比我现在更好的方法:
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) { /* ... */ }
将枚举名称作为字符串,然后将它们解析回枚举,感觉很可怕。
答案 0 :(得分:34)
好吧,你可以使用Enum.GetValues
:
foreach (GameObjectType type in Enum.GetValues(typeof(GameObjectType))
{
...
}
虽然它没有强力打字 - 而且IIRC它很慢。另一种方法是使用我的UnconstrainedMelody project:
// Note that type will be inferred as GameObjectType :)
foreach (var type in Enums.GetValues<GameObjectType>())
{
...
}
如果你在enums上做了很多工作,那么UnconstrainedMelody很不错,但是对于单次使用来说可能有点过头了......
答案 1 :(得分:2)
以防其他人疯狂到想要做希望在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
}