我正在研究帮助我学习C#的书,其中一个项目类似于那些旧游戏中的一个,在基础Powerpoint类(class)中进行了讲授。此特定示例使用for循环,该循环定义一个房间或区域具有多少个导出(外门)。

这是通过外门移动的示例。当我回过门,使用“MoveToANewLocation()”方法时,“currentLocation”失去了它的值(value)。随后,for循环将值设置为负,从而导致错误。

private void MoveToANewLocation(Location newLocation)
    {
        currentLocation = newLocation;

        exits.Items.Clear();
        for (int i = 0; i < currentLocation.Exits.Length; i++)
        {
            exits.Items.Add(currentLocation.Exits[i].Name);
        }

        exits.SelectedIndex = 0;

        description.Text = currentLocation.Description;

        if (currentLocation is IHasExteriorDoor)
        {
            goThroughTheDoor.Visible = true;
        }
        else
        {
            goThroughTheDoor.Visible = false;
        }

    }

我有一个与上述示例完全相同的引用示例,可以正常工作。当按钮“goThroughTheDoor”调用“MoveToANewLocation()”方法时,为什么currentLocation会丢失其值,对此我感到很困惑。

抱歉,如果不清楚,我对现代编程还是很陌生

最佳答案

MoveToANewLocation 方法开始时,它将 currentLocation 设置为参数 newLocation 的副本:

//currentLocation = newLocation;

当方法退出时 currentLocation 超出范围,垃圾收集器可以清理以将该内存用于范围内的对象。这解释了退出方法后它的值是如何丢失的。

10-04 19:44