Rumah > pembangunan bahagian belakang > C++ > Mengapa `? 10: Null` Dilarang dalam pengendali C# Ternary dengan jenis yang tidak dapat dibatalkan?

Mengapa `? 10: Null` Dilarang dalam pengendali C# Ternary dengan jenis yang tidak dapat dibatalkan?

Mary-Kate Olsen
Lepaskan: 2025-01-28 21:51:10
asal
168 orang telah melayarinya

Why is `? 10 : null` Forbidden in C# Ternary Operators with Nullable Types?

C#Ternary Pengkomputeran dan Jenis Kosong: Mengapa

Laporkan ralat? ? 10 : null Apabila menggunakan jenis yang tersedia di C#, konsistensi jenis dalam ungkapan sangat penting. Karakter pengkomputeran ternary (? :) Menilai kedua -dua ungkapan berdasarkan keadaan.

Pertimbangkan serpihan kod berikut:

di sini, kami cuba menetapkan int dan null ke kabel int variable X. Ini boleh menyebabkan kesilapan penyusun, kerana tidak ada penukaran tersembunyi antara kedua -dua jenis ini.

<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; // 错误</code>
Salin selepas log masuk
pengkompil pertama cuba menilai ungkapan yang betul:

literal 10 adalah jenis int, dan null adalah jenis kosong. Tiada penukaran tersembunyi antara kedua -dua, jadi kesilapan berlaku.

<code class="language-csharp">GetBoolValue() ? 10 : null</code>
Salin selepas log masuk
Untuk menyelesaikan masalah ini, kita dapat melakukan penukaran eksplisit untuk memastikan konsistensi jenis:

atau, kita boleh menukar permukaan perkataan kosong ke int?:

<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null; // 将10转换为int?</code>
Salin selepas log masuk

atau, kita boleh menggunakan kata kunci lalai:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null; // 将null转换为int?</code>
Salin selepas log masuk

Dengan memastikan konsistensi jenis, kita boleh mengelakkan ralat pengkompil dan mengekalkan kesempurnaan jenis.

Atas ialah kandungan terperinci Mengapa `? 10: Null` Dilarang dalam pengendali C# Ternary dengan jenis yang tidak dapat dibatalkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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