Rumah > pembangunan bahagian belakang > C++ > Mengapa Operator Bersyarat C# Saya Melemparkan Ralat 'Tidak Dapat Menghantar Secara Tersirat'?

Mengapa Operator Bersyarat C# Saya Melemparkan Ralat 'Tidak Dapat Menghantar Secara Tersirat'?

Barbara Streisand
Lepaskan: 2025-01-24 14:06:10
asal
194 orang telah melayarinya

Why Does My C# Conditional Operator Throw a

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>
Salin selepas log masuk
menggunakan pernyataan

: if-else

<code class="language-csharp">if (aBoolValue)
    aByteValue = 1;
else
    aByteValue = 0;</code>
Salin selepas log masuk
ini disusun tanpa kesilapan. Tetapi menggunakan pengendali bersyarat:

<code class="language-csharp">aByteValue = aBoolValue ? 1 : 0;</code>
Salin selepas log masuk
menghasilkan ralat "tidak boleh secara tersirat menukar 'int' ke 'byte'" ralat.

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>
Salin selepas log masuk
Ini secara eksplisit memberitahu pengkompil niat kami untuk menukar hasil

kepada int, menyelesaikan kesilapan penyusunan. byte

Contoh ini menggariskan keperluan untuk pertimbangan yang teliti terhadap penukaran jenis tersirat apabila menggunakan pengendali bersyarat. Walaupun ia menawarkan sintaks ringkas, memahami tingkah laku pengendalian jenisnya dan menggunakan pelakon yang jelas apabila perlu adalah penting untuk mengelakkan kesilapan penyusunan yang tidak dijangka.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan