当我从列表中访问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]'的返回值,因为它不是变量."
任何帮助,将不胜感激.
基本上,编译器阻止你犯错误.当您访问时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.
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |