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

时间:2013-04-11 21:27:02

标签: c#

名为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;
            }
        }

1 个答案:

答案 0 :(得分:5)

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

currentRoom = newRoom;

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

编辑:

为了澄清调试器为什么向您显示错误的信息:

它显示了您选择的上下文值。在这种情况下,currentRoomMoveToANewRoom内意味着不同的内容,因此它“帮助”为您更新值。至于在这样的案件中是否应该进行更多的澄清已经受到许多辩论:)。