名为MoveToANewRoom(Room newRoom)
的方法应该将变量设置为实例,并且在方法过程中执行此操作,但最后将变量设置回null,没有明显的原因。
我在调试器中运行了代码,发现在执行方法currentRoom
期间,名为room1
的变量按预期设置为MoveToANewRoom(Room newRoom)
。但是,当方法执行完毕后,变量currentRoom
将再次设置回null
。
我错过了一些非常基本的东西吗?
这是我的代码:
public partial class Form1 : Form
{
Room currentRoom;
public Form1()
{
InitializeComponent();
Room room1 = new Room("Living Room");
Room room2 = new Room("Dining Room");
Room room3 = new Room("Kitchen");
Room room4 = new Room("Front Yard");
Room room5 = new Room("Back Yard");
Room room6 = new Room("Garden");
room1.Exits = new Room[] { room2, room3 };
room2.Exits = new Room[] { room1, room4 };
room3.Exits = new Room[] { room1, room4 };
room4.Exits = new Room[] { room2, room3, room5, room6 };
room5.Exits = new Room[] { room4 };
room6.Exits = new Room[] { room4 };
MoveToANewRoom(room1);
}
public class Room
{
public string Name;
public Room[] Exits;
public Room(string name)
{
this.Name = name;
}
}
public void MoveToANewRoom(Room newRoom)
{
Room currentRoom = newRoom;
exits.Items.Clear();
for (int i = 0; i < currentRoom.Exits.Length; i++)
{
exits.Items.Add(currentRoom.Exits[i].Name);
exits.SelectedIndex = 0;
}
}
答案 0 :(得分:5)
这是因为您正在定义特定于该方法的局部变量currentRoom
。
currentRoom = newRoom;
是完成永久性更改的正确语法。
编辑:
为了澄清调试器为什么向您显示错误的信息:
它显示了您选择的上下文值。在这种情况下,currentRoom
在MoveToANewRoom
内意味着不同的内容,因此它“帮助”为您更新值。至于在这样的案件中是否应该进行更多的澄清已经受到许多辩论:)。