Ralat pengkompil apabila menggunakan jenis nullable untuk tugasan bersyarat dalam C#
Dalam C#, penugasan menggunakan operator bersyarat (?) kadangkala menyebabkan ralat pengkompil apabila bekerja dengan jenis nullable (seperti Nullable<int>
). Contoh biasa cuba memberikan hasil ungkapan bersyarat kepada pembolehubah yang boleh dibatalkan, seperti yang ditunjukkan dalam kod berikut:
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
Kod ini memberikan null apabila employeeNumberTextBox.Text
kosong dan memberikan nilai int apabila ia tidak kosong. Walau bagaimanapun, pengkompil mengadu "Tidak boleh melakukan penukaran tersirat antara 'null' dan 'int'".
Analisis Punca
Masalahnya ialah pengendali bersyarat hanya mempertimbangkan jenis nilai benar dan salah, bukan konteks di mana ungkapan itu digunakan. Dalam kes ini, pengkompil tidak boleh menentukan jenis ungkapan yang terhasil kerana ia mengandungi null dan int, yang merupakan jenis yang tidak serasi.
Penyelesaian
Untuk menyelesaikan masalah ini, anda boleh menghantar salah satu nilai secara manual kepada jenis yang boleh batal:
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? (int?)null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
Dengan menghantar secara eksplisit null ke (int?)null
, anda memberikan pengkompil dengan maklumat jenis yang diperlukan untuk menghuraikan ungkapan dan membuat tugasan. Sebagai alternatif, anda boleh menghantar nilai int ke (int?)
jika perlu.
Penyelesaian ini membolehkan anda menggunakan jenis nullable dan operator bersyarat dengan cara yang lebih elegan, terutamanya apabila memulakan sifat dalam pemula objek.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Pengkompil Apabila Menggunakan Tugasan Bersyarat dengan Jenis Nullable dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!