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: ? :
bool aBoolValue; byte aByteValue;
: if-else
if (aBoolValue) aByteValue = 1; else aByteValue = 0;
aByteValue = aBoolValue ? 1 : 0;
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
aByteValue = aBoolValue ? (byte)1 : (byte)0;
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!