我正在使用自动实现的属性。我想解决以下问题的最快方法是声明我自己的支持变量?
public Point Origin { get; set; } Origin.X = 10; // fails with CS1612
错误消息:无法修改“表达式”的返回值,因为它不是变量 试图修改作为中间表达式结果的值类型。因为该值没有被持久化,所以该值将保持不变。 要解决此错误,请将表达式的结果存储在中间值中,或对中间表达式使用引用类型。
错误消息:无法修改“表达式”的返回值,因为它不是变量
试图修改作为中间表达式结果的值类型。因为该值没有被持久化,所以该值将保持不变。
要解决此错误,请将表达式的结果存储在中间值中,或对中间表达式使用引用类型。
这是因为Point是值类型 ( struct)。
Point
struct
因此,当您访问Origin属性时,您访问的是类所持有的值的 副本class,而不是像使用引用类型 ( ) 那样访问值本身,所以如果您在其上设置X属性,那么您正在设置副本上的属性,然后丢弃它,保持原始值不变。这可能不是您想要的,这就是编译器警告您的原因。
Origin
class
X
如果您只想更改X值,则需要执行以下操作:
Origin = new Point(10, Origin.Y);