小编典典

错误:“无法修改返回值”c#

all

我正在使用自动实现的属性。我想解决以下问题的最快方法是声明我自己的支持变量?

public Point Origin { get; set; }

Origin.X = 10; // fails with CS1612

错误消息:无法修改“表达式”的返回值,因为它不是变量

试图修改作为中间表达式结果的值类型。因为该值没有被持久化,所以该值将保持不变。

要解决此错误,请将表达式的结果存储在中间值中,或对中间表达式使用引用类型。


阅读 119

收藏
2022-08-08

共1个答案

小编典典

这是因为Point是值类型 ( struct)。

因此,当您访问Origin属性时,您访问的是类所持有的值的 副本class,而不是像使用引用类型 ( )
那样访问值本身,所以如果您在其上设置X属性,那么您正在设置副本上的属性,然后丢弃它,保持原始值不变。这可能不是您想要的,这就是编译器警告您的原因。

如果您只想更改X值,则需要执行以下操作:

Origin = new Point(10, Origin.Y);
2022-08-08