Rumah >pembangunan bahagian belakang >C++ >Mengapa tugas bersyarat C# saya gagal dengan ralat penukaran jenis tersirat?
Tugasan Bersyarat C# dan Ralat Penukaran Jenis Tersirat: Penjelasan Terperinci
Operator bersyarat C# (? :
) menawarkan cara ringkas untuk menetapkan nilai berdasarkan syarat. Walau bagaimanapun, inferens jenis dalam operator ini kadangkala boleh membawa kepada ralat penukaran jenis tersirat. Artikel ini menjelaskan punca asas dan menyediakan penyelesaian.
Pengkompil menentukan jenis ungkapan bersyarat semata-mata dengan menganalisis jenis akibatnya dan ungkapan alternatif, tanpa mengira jenis pembolehubah sasaran. Jenis yang lebih merangkumi antara akibat dan alternatif menjadi jenis keseluruhan ungkapan bersyarat. Sebagai contoh, jika akibatnya ialah int
dan alternatif a byte
, jenis yang terhasil ialah int
.
Mekanisme inferens jenis ini menerangkan ralat dalam soalan asal. Jika kedua-dua akibat dan alternatif ialah integer (int
), ungkapan bersyarat juga disimpulkan sebagai int
, bukan byte
. Menugaskan int
ini kepada pembolehubah byte
secara langsung mengakibatkan ralat pengkompil: "Tidak boleh secara tersirat menukar jenis 'int' kepada 'bait'".
Penyelesaian melibatkan secara eksplisit menghantar ungkapan bersyarat kepada jenis sasaran:
<code class="language-csharp">aByteValue = (byte)(aBoolValue ? 1 : 0);</code>
Pelakon eksplisit ini memastikan hasil ungkapan bersyarat ditukar kepada byte
sebelum tugasan, menyelesaikan ketidakpadanan jenis.
Menguasai peraturan inferens jenis C# adalah penting untuk mengelakkan ralat tersebut apabila menggunakan operator bersyarat. Memahami cara pengkompil membuat kesimpulan jenis membolehkan pembangun menulis kod yang betul dan bebas ralat.
Atas ialah kandungan terperinci Mengapa tugas bersyarat C# saya gagal dengan ralat penukaran jenis tersirat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!