从列表中设置System.Windows.Point的Y坐标会产生修改错误

Son*_*Bae 2 c#

当我从列表中访问Point时,我在设置Point的Y坐标时遇到了一些麻烦.

例如,这是有效的.

System.Windows.Point test = new System.Windows.Point(6,5);
test.Y = 6;
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个点列表,我通过列表访问一个点来设置Y坐标,我收到一个错误.

List<System.Windows.Point> bfunction = new List<System.Windows.Point>();
bfunction.Add(new System.Windows.Point(0, 1));
bfunction[0].Y = 6;
Run Code Online (Sandbox Code Playgroud)

bfunction [0]带有下划线并给出错误"无法修改'System.Collections.Generic.List.this [int]'的返回值,因为它不是变量."

任何帮助,将不胜感激.

Jon*_*eet 5

基本上,编译器阻止你犯错误.当您访问时bfunction[0],将返回该点的副本.Point不幸的是,(IMO)是一个可变结构.因此,如果编译器允许您更改副本,那么该副本将被丢弃,并且该语句将毫无意义.相反,您需要使用变量来获取副本,在那里进行更改,然后将其放回列表中:

Point point = bfunction[0];
point.Y = 6;
bfunction[0] = point;
Run Code Online (Sandbox Code Playgroud)

如果Point是引用类型,则不需要这样做,如果Point不可变值类型,则不会有机会发出错误.你仍然需要单独获取和设置,但它应该是这样的:

bfunction[0] = bfunction[0].WithY(6);
Run Code Online (Sandbox Code Playgroud)

... WithY返回一个与原始Point值具有相同X值的值,但指定的值Y.