C#获取枚举,但不能正确使用switch语句

时间:2015-02-26 21:15:35

标签: c# oop .net

我在使用枚举时出现问题,然后使用switch语句检查它。我不确定我是否做了一些超级错误的事情,但我不会因此而犯任何错误。

# Level.cs

enum LevelID
{
    Level_One = 0,
    Level_Two = 1,
}

private LevelID lvlID;
private string xml;

StreamReader xmlStream;

public Level()
{
    switch (lvlID)
    {
        case LevelID.Level_One:
            xmlStream = new StreamReader("../../assets/xml/test1.tmx");
            break;
        case LevelID.Level_Two:
            xmlStream = new StreamReader("../../assets/xml/test2.tmx");
            break;
      }

      xml = xmlStream.ReadToEnd();
      xmlStream.Close();
}

public LevelID LvlID
{
    get { return this.lvlID; }
    set { this.lvlID = value; }
}

public string Xml
{
    get { return this.xml; }
}


## The xml gives me lots of numbers from the different files

# game.cs

Level lvl = new Level();
lvl.LvlID = LevelID.Level_Two;

## When I then get the lvlID from Level.cs again its says it holds Level_Two,
## but the switch still gives me the numbers from test1.xml

问题是我在switch语句中使用枚举来检查我应该将哪个xml文件存储在我解析为XElement的String中。

当我尝试这样做时,它总是从第一个开关盒给我xml,即使我检查时,我的enum变量为第二种情况保存了正确的枚举。即使我的交换机没有默认设置,它仍会加载第一个案例的xml文件。发生了什么事,我做错了什么?

1 个答案:

答案 0 :(得分:3)

所以你的开关在构造函数中。它只在您实例化类时进行评估。由于您在之后设置了属性,因此交换机永远不会看到它。

也就是说,如果您使用调试器,这可能会非常简单。您可以在switch语句处停止代码并查看值是什么。然后你可以单步执行代码,看看为什么价值不符合预期。