C# 更改列表中的点

C# 更改列表中的点,c#,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--) { l

我已经编写了一个简单的类,
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) (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);
}

发布你的
要点
课程。并向我们展示如何创建
listOfPoints
listOfPoint[i]=listOfPoint[i-1]
不创建新的
对象。您有两个元素引用相同的
对象。您可能应该使
成为
结构
,而不是
。如果适用,也可以使用WinForms的内置版本。您应该了解两者之间的区别