方法在执行期间将变量设置为实例,但在执行结束时将其设置回null
本文关键字:设置 执行 结束 null 实例 执行期 变量 方法 | 更新日期: 2023-09-27 18:08:58
名为MoveToANewRoom(Room newRoom)
的方法应该将一个变量设置为一个实例,并且它在方法过程中这样做,但是在结束时,不知什么原因将变量设置回null。
我在调试器中运行代码,看到在执行方法MoveToANewRoom(Room newRoom)
期间,名为currentRoom
的变量被设置为room1
。然而,当方法完成执行时,变量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;
}
}
这是因为您正在定义一个特定于该方法的局部变量currentRoom
。
currentRoom = newRoom;
是完成永久更改的正确语法。
编辑:说明为什么调试器显示了错误的信息:
显示您选择的上下文值。在这种情况下,currentRoom
在MoveToANewRoom
中意味着不同的东西,因此它"有用地"为您更新值。对于这种情况是否应该有更多的澄清,已经有很多争论:)。