方法在执行期间将变量设置为实例,但在执行结束时将其设置回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;
            }
        }

方法在执行期间将变量设置为实例,但在执行结束时将其设置回null

这是因为您正在定义一个特定于该方法的局部变量currentRoom

currentRoom = newRoom;

是完成永久更改的正确语法。

编辑:

说明为什么调试器显示了错误的信息:

显示您选择的上下文值。在这种情况下,currentRoomMoveToANewRoom中意味着不同的东西,因此它"有用地"为您更新值。对于这种情况是否应该有更多的澄清,已经有很多争论:)。