Rumah >pembangunan bahagian belakang >C++ >Kenapa pengendali ternary gagal dengan jenis yang boleh dibatalkan di C#?

Kenapa pengendali ternary gagal dengan jenis yang boleh dibatalkan di C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-28 21:56:09959semak imbas

Why Does the Ternary Operator Fail with Nullable Types in C#?

simbol pengkomputeran ternary dan jenis kosong dalam C#: Had Butiran

Apabila memproses jenis nilai kosong, simbol pengkomputeran ternary (? :) Mungkin mempunyai tingkah laku yang tidak dijangka. Masalah biasa ialah cuba menggunakan simbol pengkomputeran ternary untuk menetapkan watak integer atau batal kepada pemboleh ubah integer kanal.

Sebagai contoh, pertimbangkan kod berikut:

Dalam kod ini, simbol pengkomputeran ternary cuba mengira ungkapan yang betul:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null;</code>

di antara mereka, kembali ke nilai boolean, 10 adalah integer literal, null adalah rujukan kosong. Pengkompil cuba untuk menukar nilai -nilai ini untuk memadankan jenis ekspresi kiri, iaitu,
<code class="language-csharp">GetBoolValue() ? 10 : null</code>
.

Walau bagaimanapun, tidak ada penukaran tersembunyi antara jumlah literal (tidak boleh kosong) dan integer kosong (). Begitu juga, tidak ada penukaran tersembunyi antara null dan integer. Ini menyebabkan ralat pengkompil: GetBoolValue() int?

Untuk menyelesaikan masalah ini, ungkapan yang betul mesti diubah suai untuk memastikan bahawa kedua -dua cabang pengendali tiga -yuan mengembalikan nilai -nilai yang serasi dengan ekspresi kiri. Ini dapat dicapai melalui penukaran tersirat atau penukaran eksplisit:

int?

Melalui pengubahsuaian ini, pengkompil berjaya mengira ekspresi yang betul dan menentukan jenis ekspresi bersyarat untuk menghapuskan kesilapan.
<code>无法确定条件表达式的类型,因为整型和<null>之间没有隐式转换。</code>

Atas ialah kandungan terperinci Kenapa pengendali ternary gagal dengan jenis yang boleh dibatalkan di C#?. 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