一尘不染

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

c#

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

public Point Origin { get; set; }

Origin.X = 10; // fails with CS1612

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

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

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


阅读 274

收藏
2020-05-19

共1个答案

一尘不染

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

因此,当您访问Origin属性时,您将访问该类所拥有的值的 副本
,而不是使用引用类型(class)时的值本身,因此,如果您X在其上设置属性,则需要设置副本上的属性,然后将其丢弃,保留原始值不变。这可能不是您想要的,这就是编译器向您发出警告的原因。

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

Origin = new Point(10, Origin.Y);
2020-05-19