C# Perangkap pengendali bersyarat: Isu pemutus tersirat
operator bersyarat C#() menyediakan cara yang padat untuk melaksanakan tugasan bersyarat. Walau bagaimanapun, masalah biasa timbul apabila berurusan dengan penukaran jenis. Mari kita periksa senario ini: ? :
<code class="language-csharp">bool aBoolValue; byte aByteValue;</code>
: if-else
<code class="language-csharp">if (aBoolValue) aByteValue = 1; else aByteValue = 0;</code>
<code class="language-csharp">aByteValue = aBoolValue ? 1 : 0;</code>
Memahami punca akar
pengkompil menilai ekspresi bersyarat dari dalam ke luar. Nilai literal dan 1
dianggap sebagai bilangan bulat (0
). Oleh itu, keseluruhan jenis ekspresi bersyarat ialah int
. C# tidak secara tersirat menukar int
ke int
kecuali pengkompil boleh menjamin nilai byte
berada dalam julat int
(0-255). Oleh kerana byte
tidak tetap, pengkompil tidak dapat membuat jaminan ini. aBoolValue
Penyelesaian: Pemutus eksplisit
Penyelesaiannya adalah dengan jelas membuang hasil ekspresi kepada: byte
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0;</code>
kepada int
, menyelesaikan kesilapan penyusunan. byte
Atas ialah kandungan terperinci Mengapa Operator Bersyarat C# Saya Melemparkan Ralat 'Tidak Dapat Menghantar Secara Tersirat'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!