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
Lepaskan: 2025-01-28 21:56:09
asal
899 orang telah melayarinya

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

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

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

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!

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