0

我写了一个简单的类,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)

在此之后 - 我想改变 Y 的值listOfPoint[0],所以:

listOfPoint[0].Y = 11;

再次打印列表,输出为:

(33, 10)
(34, 11)
(34, 11)

为什么没有输出:

(33, 10)
 (34, 10) 
(34, 11)

我该怎么做呢?

4

2 回答 2

1

在“将它们向上移动一个”(第二个 for 循环)结束时, listOfPoint[0] 和 listOfPoint[1] 指向同一个对象。为避免这种情况,请添加以下行:

listOfPoint[0] = new Point(listOfPoint[1].X, listOfPoint[1].Y);
于 2012-05-05T18:05:56.593 回答
0

发生这种情况是因为您有两个数组元素引用同一个对象。这是由于指针。

尝试这样做以避免问题:

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);
}
于 2012-05-05T18:06:18.287 回答