Menyelesaikan masalah Ralat "Tidak Dapat Ubah Suai Nilai Pulangan" C#
Ralat "Tidak boleh mengubah suai nilai pulangan '...' kerana ia bukan pembolehubah" dalam C# sering timbul apabila bekerja dengan sifat dan jenis nilai yang dilaksanakan secara automatik. Ini berlaku kerana mengakses sifat jenis nilai mengembalikan salinan data, bukan rujukan langsung kepada yang asal.
Jenis Nilai lwn. Jenis Rujukan: Isu Teras
Sifat yang dilaksanakan secara automatik, secara lalai, menahan jenis nilai (seperti struct Point
). Apabila anda mengakses harta jenis nilai, anda sedang menggunakan salinan sementara. Sebarang perubahan yang dibuat pada salinan ini hilang setelah operasi selesai.
Mengapa Pengubahsuaian Gagal
Percubaan untuk mengubah suai sifat jenis nilai secara langsung (mis., Origin.X = 10;
) hanya mengubah suai salinan sementara ini, menjadikan sifat asal tidak berubah. Ini membawa kepada ralat pengkompil "Tidak boleh mengubah suai nilai pulangan".
Penyelesaian Berkesan
Berikut ialah dua cara untuk mengubah suai sifat dengan betul:
Gunakan Jenis Rujukan: Tentukan harta anda menggunakan jenis rujukan (kelas) dan bukannya jenis nilai. Perubahan pada sifat objek kemudiannya akan mempengaruhi secara langsung nilai asal yang dipegang oleh harta tersebut.
<code class="language-csharp">public Point Origin { get; set; } = new Point(); // Now Origin is a reference type</code>
Tetapkan semula Nilai Diubah Suai: Cipta tika baharu jenis nilai dengan nilai yang dikemas kini dan tetapkan tika baharu ini kembali kepada harta itu.
<code class="language-csharp">Origin = new Point(10, Origin.Y); // Create a new Point and assign it back to Origin</code>
Pendekatan pertama (menggunakan jenis rujukan) biasanya lebih disukai untuk kod yang lebih bersih dan lebih intuitif, terutamanya apabila berurusan dengan objek yang kompleks. Pendekatan kedua (tugasan semula) sesuai untuk senario yang lebih mudah tetapi mungkin kurang cekap jika jenis nilainya besar atau kompleks.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tidak Dapat Ubah Suai Nilai Pulangan' dalam C# Apabila Bekerja dengan Hartanah yang Dilaksanakan secara Auto?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!