Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Tidak Boleh Ubah Suai Nilai Pulangan' Berlaku dengan Sifat Auto-Dilaksanakan dalam C#?
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!