Rumah > pembangunan bahagian belakang > C++ > Mengapa C# Melemparkan Ralat 'Tidak Dapat Ubah Suai Nilai Pulangan' Apabila Mengubahsuai Hartanah yang Dilaksanakan secara Auto?

Mengapa C# Melemparkan Ralat 'Tidak Dapat Ubah Suai Nilai Pulangan' Apabila Mengubahsuai Hartanah yang Dilaksanakan secara Auto?

Susan Sarandon
Lepaskan: 2025-01-19 09:47:09
asal
846 orang telah melayarinya

Why Does C# Throw a

Penjelasan terperinci tentang ralat "Tidak boleh mengubah suai nilai pulangan" dalam C#

Sifat yang dilaksanakan secara automatik dalam C# menyediakan cara yang mudah untuk mentakrifkan sifat, tetapi kadangkala apabila cuba mengubah suai nilai sifat, ia mungkin mengakibatkan ralat "Tidak boleh mengubah suai nilai pulangan".

Sila lihat kod berikut:

<code class="language-csharp">public Point Origin { get; set; }

Origin.X = 10; // 产生 CS1612 错误</code>
Salin selepas log masuk

Kod ini cuba menetapkan koordinat X bagi sifat Asal. Walau bagaimanapun, ia akan melaporkan ralat yang mengatakan bahawa nilai pulangan harta itu tidak boleh diubah suai kerana ia bukan pembolehubah.

Punca utama: jenis nilai dan jenis rujukan

Ralat ini berlaku kerana Point ialah jenis nilai (struktur). Jenis nilai disalin mengikut nilai, yang bermaksud bahawa apabila anda menetapkan jenis nilai kepada pembolehubah, salinan baharu dibuat. Dalam kes ini, apabila anda mengakses sifat Origin, anda sebenarnya mengakses salinan nilai Point, bukan nilai asal yang disimpan dalam kelas.

Penyelesaian

Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:

  1. Gunakan jenis rujukan: Tukar Titik kepada jenis rujukan (kelas) dan bukannya jenis nilai. Jenis rujukan disalin melalui rujukan, yang bermaksud bahawa apabila anda menetapkan jenis rujukan kepada pembolehubah, penunjuk kepada objek asal akan disalin. Ini membolehkan objek asal diubah suai secara langsung melalui sifatnya.
  2. Disimpan dalam pembolehubah sementara: Jika anda ingin mengekalkan Point sebagai jenis nilai, anda perlu menyimpan hasil capaian harta dalam pembolehubah sementara sebelum mengubah suainya. Contohnya:
<code class="language-csharp">Point temp = Origin;
temp.X = 10;
Origin = temp;</code>
Salin selepas log masuk

Dengan menyimpan nilai sifat dalam pembolehubah temp, anda mencipta salinan jenis nilai yang boleh diubah suai. Anda kemudian boleh menetapkan sifat kepada salinan yang diubah suai.

Atas ialah kandungan terperinci Mengapa C# Melemparkan Ralat 'Tidak Dapat Ubah Suai Nilai Pulangan' Apabila Mengubahsuai Hartanah yang Dilaksanakan secara Auto?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan