我有一个循环,它初始化一个带有值的对象列表,但是一旦它退出循环,对象就会变得相同
本文关键字:对象 循环 退出 列表 初始化 有一个 一个 | 更新日期: 2023-09-27 17:56:53
正如标题所暗示的那样,我正在通过循环初始化列表中的对象。但是当循环退出时,它们都变得相同。我可以在循环中看到它们不一样。但是当循环退出时,它们会更改为最后一个输入的对象。
public List<ElevationLayout> layoutList = new List<ElevationLayout>();
public int layoutNumber { get; set; }
public int worldWidth { get; set; }
public Random seed { get; set; }
public XYSize dimLeft { get; set; }
//I have narrowed down the problem to this method
//==========================================================================================================================================================
//==========================================================================================================================================================
//==========================================================================================================================================================
public void init(World world) {
dimLeft = new XYSize();
ElevationLayout layout = new ElevationLayout();
dimLeft.y = 0;
dimLeft.x = world.size.x;
seed = new Random((int)DateTime.Now.Ticks);
worldWidth = (int)((world.size.x / 6.4) + (world.size.x / 64) - 1);
layoutNumber = worldWidth + seed.Next(-2, 3);
for (int i = 0; i < layoutNumber; i++)
{
layout.type = seed.Next(0, 2);
layout.width = (world.size.x / layoutNumber) + seed.Next(0, ((dimLeft.x / layoutNumber) / 2) + 1);
if (layout.width > dimLeft.x)
{
layout.width = dimLeft.x;
}
dimLeft.x -= layout.width;
layout.height = seed.Next(world.size.y / 16, (world.size.y / 4) + 1);
if (layout.height > dimLeft.y)
{
layout.height = dimLeft.y;
}
this.layoutList.Add(layout);
Console.Write(this.layoutList[i].type); // here the objects are different
if ((world.size.y -= layout.height) > dimLeft.y)
{
dimLeft.y = (world.size.y - layout.height);
}
if (dimLeft.x <= 0)
{
layoutNumber = i;
}
}
Console.WriteLine();
for (int y = 0; y < layoutNumber; y++)
Console.Write(this.layoutList[y].type); //but as soon as i exit the loop they are the same
}
//==============================================================================================================
//==============================================================================================================
//==============================================================================================================
有人在这里遇到了类似的问题:为什么我的对象列表都一样?在这里:为什么我列表中的所有值都相同?
最初我的对象列表是静态的,但后来我删除了它,问题仍然存在。
问题是在循环之前只创建对象的一个实例并设置该对象的属性。修复:
for (int i = 0; i < layoutNumber; i++)
{
ElevationLayout layout = new ElevationLayout();
基本上在循环中创建您的对象,以便在每次迭代中分配一个新对象。
您一遍又一遍地将相同的布局添加到列表中,而不是每次都创建一个新的布局实例。移动代码以在循环中创建布局对象。