C# 更改列表的值<;点>;项目

C# 更改列表的值<;点>;项目,c#,list,C#,List,我正在申请绘制曲线。我通过单击鼠标来设置点,并将它们的位置添加到顶点列表中。现在我正在使用鼠标下移和鼠标上移来移动点。在鼠标按下时,我找出鼠标的位置是否在顶点列表中任何顶点周围的小正方形(4x4 px)中,然后在鼠标向上时,我想将垂直坐标更改为我举起鼠标按钮的坐标。但是我遇到了List的问题,因为visualstudio说列表项无法更改,因为它不是变量。我怎样才能解决这个问题 List<Point> vertices = new List<Point>(); //list

我正在申请绘制曲线。我通过单击鼠标来设置点,并将它们的位置添加到顶点列表中。现在我正在使用鼠标下移和鼠标上移来移动点。在鼠标按下时,我找出鼠标的位置是否在顶点列表中任何顶点周围的小正方形(4x4 px)中,然后在鼠标向上时,我想将垂直坐标更改为我举起鼠标按钮的坐标。但是我遇到了
List
的问题,因为visualstudio说列表项无法更改,因为它不是变量。我怎样才能解决这个问题

List<Point> vertices = new List<Point>(); //list of vertices
void canvas_MouseUp(object sender, MouseEventArgs e) {
    if (!move) return; //if moving is off returns
    vertices[indexOfMoved].X = e.X; //change X position to new position
    vertices[indexOfMoved].Y = e.Y; //change Y position to new position
    indexOfMovedLabel.Text = "Moved: ?";
}
列出顶点=新建列表()//顶点列表
void canvas_MouseUp(对象发送器,MouseEventArgs e){
if(!move)return;//如果禁用移动,则返回
顶点[indexOfMoved].X=e.X;//将X位置更改为新位置
顶点[indexOfMoved].Y=e.Y;//将Y位置更改为新位置
indexOfMovedLabel.Text=“移动:?”;
}
问题:

错误1无法修改“System.Collections.Generic.List.this[int]”的返回值,因为它不是变量


这是因为
是一个结构而不是一个对象。可以将结构视为分组值

因此,当您访问顶点[indexOfMoved]时,您会得到列表中内容的副本,而不是实际的“对象”

您可以这样做:

vertices[indexOfMoved] = new Point { X = e.X, Y = e.Y };

无法更改此值,因为点是结构。在给出很多细节之前;您需要将功能更改为以下内容:

private void canvas_MouseUp(object sender, MouseEventArgs e)
{
    if (!move) return; //if moving is off returns
    Point p = vertices[indexOfMoved];
    p.X = e.X;
    p.Y = e.Y;
    vertices[indexOfMoved] = p;            
    indexOfMovedLabel.Text = "Moved: ?";
}
这是因为您使用的是结构。如果编译器没有给出任何警告,那么将在堆栈中创建一个新的结构,并对堆栈中的结构进行更改;这对列表中的结构没有影响。编译器发出警告以防止出现这种情况