C#不允许我这样做。

foreach (Point point in filledPoints)
{
    point.X = 0;
}


FilledPoints是一个List<Point>
它给了我一个编译器错误:“ filledPoints是一个foreach迭代变量,因此不能编辑关联的成员”(对不起,该消息是德语的,翻译起来很不好)。但这有效:

foreach (Point point in filledPoints)
{
    Point point2 = point;
    point2.X = point2.X / oldSize.Width * Size.Width;
}


为什么这不起作用,还有一种更优雅的方法绕过它吗?

最佳答案

这是因为Point不是引用类型(它是结构而不是类)。因此,foreach中的point变量实际上不是对原始Point的引用,而是一个副本。编译器不允许您对其进行修改,因为(我认为)很容易以为您在不修改原始文件的情况下就认为自己在更改原始文件。

我不确定是否有更好的方法,但是您可以通过执行以下操作来解决此问题:

for (int i = 0; i < filledPoints.Count; i++)
{
    Point temp = filledPoints[i];
    temp.X = 10;
    filledPoints[i] = temp;
}

10-01 16:51