我正在阅读一本帮助我学习C#的书,其中一个项目就像是在小学电子课程中教授的那些旧游戏之一。此特定示例使用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;
}
}
我有一个与上面完全相同的参考示例,它有效。我很难过为什么currentLocation在按钮&#34; goThroughTheDoor&#34;时失去了它的价值。调用&#34; MoveToANewLocation()&#34;方法
道歉如果不清楚,我对现代编程仍然很陌生
答案 0 :(得分:0)
当MoveToANewLocation
方法开始时,它会将currentLocation
设置为参数newLocation
的副本:
//currentLocation = newLocation;
当方法退出时,currentLocation
超出范围,垃圾收集器可以清理以在范围对象中使用该内存。这解释了退出方法后其值如何丢失。