动态识别枚举成员的困难

时间:2013-10-19 09:32:31

标签: c# xna

    public enum Levels
    {
        LevelState1 = 0,
        LevelState2 = 1,
        LevelState3 = 2
    }
    private Levels currentLevel;
    public void ChooseLevel(Levels levelstate)
    {
        switch (levelstate)
        {
            case Levels.LevelState1:
                currentLevel = Levels.LevelState1;
        ...
                break;
            case Levels.LevelState2:
                currentLevel = Levels.LevelState2;
        ...     
                break;
            case Levels.LevelState3:
                currentLevel = Levels.LevelState3;
        ...
                break;
        }
    }

//The variable CurrentLevel is an integer
ChooseLevel(Levels."LevelState"+game1.CurrentLevel.ToString());

我总是在最后一行收到此错误消息: 标识符预期 我应该改变什么?我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

将其包装在try/catch

Levels level = (Levels)Enum.Parse(typeof(Levels), 
                                       "LevelState" + game1.CurrentLevel.ToString());
ChooseLevel(level);

或使用Enum.TryParse()

答案 1 :(得分:0)

ChooseLevel expectes enum参数,而你使用枚举和字符串的混合,你将不得不解析它:

Levels game1Level = (Levels)Enum.Parse(typeof(Levels), "LevelState" + game1.CurrentLevel);
ChooseLevel(game1Level);

您也可以使用Enum.TryParse

答案 2 :(得分:0)

我觉得你过于复杂。你可以用类似的方式更简单地做到这一点:

    public enum Levels
{
    LevelState1 = 1,
    LevelState2 = 2,
    LevelState3 = 3
}
private Levels currentLevel;
public void ChooseLevel(int state)
{
    currentLevel = (Levels)state; // casting to enum from int
    // process level or whatever here
}

//The variable CurrentLevel is an integer
ChooseLevel(game1.CurrentLevel);

由于您的CurrentLevel变量是一个整数,因此您可以通过将级别状态绑定到级别范围内的实际整数值来轻松地将其强制转换为枚举。因此,不是从你的枚举中的0开始,而是从第一级值开始(在你的情况下是1,不是?)。

希望这有帮助。