解決 C#「無法修改回傳值」錯誤
在使用自動實現的屬性和值類型時,C# 中經常會出現「無法修改 '...' 的回傳值,因為它不是變數」錯誤。 發生這種情況是因為存取值類型屬性傳回資料的副本,而不是對原始資料的直接引用。
值型別與引用型別:核心問題
自動實現的屬性預設保存值類型(如struct Point
)。 當您存取值類型屬性時,您正在使用臨時副本。 操作完成後,對此副本所做的任何變更都會遺失。
為什麼修改失敗
嘗試直接修改值類型屬性(例如,Origin.X = 10;
)只會修改此臨時副本,而原始屬性保持不變。這會導致“無法修改返回值”編譯器錯誤。
有效的解
以下是正確修改屬性的兩種方法:
使用參考類型:使用引用型別(類別)而不是值型別定義屬性。 物件屬性的變更將直接影響該屬性所持有的原始值。
<code class="language-csharp">public Point Origin { get; set; } = new Point(); // Now Origin is a reference type</code>
重新指派修改後的值:使用更新後的值建立值類型的新實例,並將此新實例指派回屬性。
<code class="language-csharp">Origin = new Point(10, Origin.Y); // Create a new Point and assign it back to Origin</code>
第一種方法(使用引用類型)通常更適合更乾淨、更直觀的程式碼,尤其是在處理複雜物件時。 第二種方法(重新分配)適用於較簡單的場景,但如果值類型較大或複雜,效率可能會較低。
以上是為什麼在使用自動實現的屬性時在 C# 中出現「無法修改回傳值」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!