我正在使用自动实现的属性。我猜想解决以下问题的最快方法是声明我自己的后备变量?
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);