提问人: 提问时间:5/15/2014 最后编辑:Dmitry 更新时间:3/2/2015 访问量:351
变量不保持值
Variable not holding value
问:
我正在写一本帮助我学习 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 会失去它的值。
很抱歉,如果不清楚,我对现代编程还很陌生
答:
0赞
techron
3/2/2015
#1
当该方法开始时,它设置为参数的副本:MoveToANewLocation
currentLocation
newLocation
//currentLocation = newLocation;
当方法退出时,超出范围,垃圾回收器可以清理以将该内存用于作用域内对象。这解释了退出方法后其值是如何丢失的。currentLocation
评论
0赞
FH-Inway
3/2/2015
根据问题,“currentLocation”已经在方法内部丢失了它的值,而不是在方法退出时丢失(请参阅方法内部的 for 循环导致错误的说明,因为“currentLocation”没有值)。因此,我认为这并不能回答这个问题。
评论
currentLocation
goThroughTheDoor
currentLocation
currentLocation
newLocation
MoveToANewLocation