C# 自动实现的属性提供了一种简化的数据封装方法。 但是,尝试直接修改这些属性可能会导致令人沮丧的“无法修改返回值”编译器错误。
出现此错误是因为自动实现的属性在访问时返回基础数据的副本。 因此,对此副本的任何更改都不会保留;它们不会影响原始存储值。
观察以下示例:
<code class="language-csharp">public Point Origin { get; set; } Origin.X = 10; // Results in CS1612 error</code>
发生错误是因为Point
是值类型(结构体)。 访问 Origin
提供副本,而不是直接引用。修改副本的 X
属性会使原始 Origin
保持不变。
解决方案涉及使用引用类型(类)或使用中间变量。 这是正确的方法:
<code class="language-csharp">Origin = new Point(10, Origin.Y);</code>
此代码使用更新的 Point
坐标创建一个新的 X
对象,并将其分配回 Origin
属性。 由于 Origin
是引用类型,因此此修改会正确反映在后备存储中。
以上是为什么修改 C# 自动实现的属性会导致'无法修改返回值”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!