变量不保持值

Variable not holding value

提问人: 提问时间:5/15/2014 最后编辑:Dmitry 更新时间:3/2/2015 访问量:351

问:

我正在写一本帮助我学习 C# 的书,其中一个项目有点像在初级 powerpoint 课程中教授的那些旧游戏之一。此特定示例使用 for 循环来定义房间或区域的出口(外门)数量。

这是通过外门移动的示例。当我回到门口时,使用“MoveToANewLocation()”方法,“currentLocation”失去了它的值。随后,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 会失去它的值。

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

C# for 循环 null

评论

1赞 5/15/2014
您能解释一下“范围”是什么意思吗?
2赞 Franck 5/15/2014
它在哪里宣布?
1赞 Codor 5/15/2014
在代码中,看不到定义的位置。也许它被一遍又一遍地初始化?请显示更多代码。currentLocation
2赞 keenthinker 5/15/2014
您还能显示按钮处理程序的代码吗?goThroughTheDoor
2赞 gookman 5/15/2014
我假设这是一个班级成员。更改其值的唯一位置是在方法的开头,因此问题可能与您的参数有关,而不是与方法有关。你应该发布更多的代码,让事情更清楚一些。currentLocationcurrentLocationnewLocationMoveToANewLocation

答:

0赞 techron 3/2/2015 #1

当该方法开始时,它设置为参数的副本:MoveToANewLocationcurrentLocationnewLocation

//currentLocation = newLocation;

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

评论

0赞 FH-Inway 3/2/2015
根据问题,“currentLocation”已经在方法内部丢失了它的值,而不是在方法退出时丢失(请参阅方法内部的 for 循环导致错误的说明,因为“currentLocation”没有值)。因此,我认为这并不能回答这个问题。