【发布时间】:2010-12-17 09:17:23
【问题描述】:
我正在使用自动实现的属性。 我想解决以下问题的最快方法是声明我自己的支持变量?
public Point Origin { get; set; }
Origin.X = 10; // fails with CS1612
错误消息:无法修改“表达式”的返回值,因为 它不是变量
试图修改一个值类型,该值类型是 中间表达。因为值没有持久化,所以值 将保持不变。
要解决此错误,请将表达式的结果存储在 中间值,或使用中间值的引用类型 表达。
【问题讨论】:
-
这再次说明了为什么可变值类型是一个坏主意。如果您可以避免改变值类型,请这样做。
-
获取以下代码(来自我在某个 EL 博客上的 AStar 实现的努力:-),这无法避免更改值类型: class Path
: IEnumerable where T : INode, new() {...} public HexNode(int x, int y) : this(new Point(x, y)) {} Path path = new Path (new T(x, y)); // 错误 // 丑陋的修复 Path path = new Path (new T()); path.LastStep.Centre = new Point(x, y);
标签: c# variables struct immutability