更改列表中的点
本文关键字:列表 | 更新日期: 2023-09-27 18:33:14
我写了一个简单的类,point
,我想在列表中使用它。
在列表中,我有 3 分。如果我打印它:
for (int i = listOfPoint.Count -1; i >=0; i--)
{
Console.WriteLine(listOfPoint[i].toString());
}
输出为:
(32, 10)
(33, 10)
(34, 10)
现在,我想这样做:
for (int i = listOfPoint.Count -1; i > 0; i--)
{
listOfPoint[i] = listOfPoint[i - 1];
}
在此之后 - 打印:
(33, 10)
(34, 10)
(34, 10)
在此之后 - 我想更改 listOfPoint[0]
的 Y 值,所以:
listOfPoint[0].Y = 11;
再次打印列表,输出为:
(33, 10)
(34, 11)
(34, 11)
为什么输出不是:
(33, 10)(34, 10)(34, 11)
我怎么能这样呢?
在"将它们向上移动一"(第二个循环)的末尾,listOfPoint[0]和listOfPoint[1]指向同一对象。 为避免这种情况,请添加以下行:
listOfPoint[0] = new Point(listOfPoint[1].X, listOfPoint[1].Y);
发生这种情况是因为数组的两个元素引用同一个对象。这是由于指针。
尝试执行此操作以避免此问题:
for (int i = listOfPoint.Count -1; i > 0; i--)
{
//Pass the value not the pointer
listOfPoint[i] = new Point(listOfPoint[i-1].X, listOfPoint[i-1].Y);
}