我在使用枚举时出现问题,然后使用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文件。发生了什么事,我做错了什么?
答案 0 :(得分:3)
所以你的开关在构造函数中。它只在您实例化类时进行评估。由于您在之后设置了属性,因此交换机永远不会看到它。
也就是说,如果您使用调试器,这可能会非常简单。您可以在switch语句处停止代码并查看值是什么。然后你可以单步执行代码,看看为什么价值不符合预期。