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中文網其他相關文章!