Rumah >pembangunan bahagian belakang >C++ >Mengapa penukaran jenis tersirat gagal dengan pengendali bersyarat C#dan bagaimana ia dapat diselesaikan?

Mengapa penukaran jenis tersirat gagal dengan pengendali bersyarat C#dan bagaimana ia dapat diselesaikan?

Barbara Streisand
Barbara Streisandasal
2025-01-24 13:51:09976semak imbas

Why Does Implicit Type Conversion Fail with C#'s Conditional Operator and How Can It Be Resolved?

c# Operator bersyarat dan isu penukaran jenis tersirat

pengendali bersyarat C# () boleh menyebabkan kesilapan penukaran jenis yang tidak dijangka. Senario biasa melibatkan memberikan nilai boolean kepada pemboleh ubah byte:

?:

Kod ini gagal kerana jenis pengendali bersyarat ditentukan oleh operannya (1 dan 0). C# merawat nombor literal ini sebagai
<code class="language-csharp">byte aByteValue;
bool aBoolValue = true;
aByteValue = aBoolValue ? 1 : 0; // Error: Cannot implicitly convert type 'int' to 'byte'</code>
jenis. Oleh itu, pengendali menghasilkan hasil

, yang tidak dapat ditukar secara tersirat kepada A int. int byte Tidak seperti tugasan biasa di mana jenis pembolehubah sasaran menentukan penukaran, pengendali bersyarat mengutamakan jenis cawangannya yang biasa. Dalam kes ini, kedua -dua cawangan secara tersirat boleh ditukar kepada

, membuat

jenis hasil. int int

Resolusi: Pemutus eksplisit

Penyelesaiannya adalah dengan jelas melemparkan ekspresi bersyarat kepada

:

byte

Pelakon eksplisit ini memastikan ekspresi bersyarat menilai kepada
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0; // Correct</code>
, menyelesaikan ralat penukaran tersirat. Pengkompil kini memahami jenis yang dimaksudkan dan melakukan penukaran yang diperlukan dengan selamat.

Atas ialah kandungan terperinci Mengapa penukaran jenis tersirat gagal dengan pengendali bersyarat C#dan bagaimana ia dapat diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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