更改列表中的点

本文关键字:列表 | 更新日期: 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);
}