我写了一个简单的类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)
我怎么能这样做?
答案 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);
}