更改列表中的某个点

时间:2012-05-05 17:59:18

标签: c#

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

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

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

listOfPoint[0] = new Point(listOfPoint[1].X, listOfPoint[1].Y);

答案 1 :(得分: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);
}