Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Tidak Boleh Ubah Suai Nilai Pulangan' Berlaku dengan Sifat Auto-Dilaksanakan dalam C#?

Mengapa 'Tidak Boleh Ubah Suai Nilai Pulangan' Berlaku dengan Sifat Auto-Dilaksanakan dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-19 09:42:09957semak imbas

Why Does

Ralat "Tidak boleh mengubah suai nilai pulangan" dalam C#

Apabila menggunakan sifat yang dilaksanakan secara automatik, ralat "Tidak boleh mengubah suai nilai pulangan" mungkin berlaku, contohnya:

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

Origin.X = 10; // 出现 CS1612 错误</code>

Analisis punca ralat

Ralat ini berlaku kerana Point ialah jenis nilai (struktur). Apabila mengakses atribut Origin, salinan nilai yang dipegang dalam kelas dikembalikan, bukan nilai itu sendiri. Mengubah suai sifat salinan tidak menjejaskan nilai asal.

Penyelesaian

Untuk menyelesaikan masalah ini, nilai asas perlu diubah suai secara langsung. Untuk jenis nilai, ini boleh dicapai dengan menyimpan salinan dalam pembolehubah sementara dan menetapkan sifat pada pembolehubah itu:

<code class="language-csharp">Point originCopy = Origin;
originCopy.X = 10;
Origin = originCopy;</code>

Sebagai alternatif, anda boleh mencipta medan sandaran anda sendiri untuk menyimpan jenis nilai dan mengubah suai medan secara terus:

<code class="language-csharp">private Point _origin;
public Point Origin
{
    get { return _origin; }
    set { _origin = value; }
}</code>

Dengan cara ini, anda boleh mengubah suai terus atribut Origin:

<code class="language-csharp">Origin.X = 10; // 此行现在可以正常工作,不会报错</code>

Atas ialah kandungan terperinci Mengapa 'Tidak Boleh Ubah Suai Nilai Pulangan' Berlaku dengan Sifat Auto-Dilaksanakan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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