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
Mary-Kate Olsenasal
2025-01-28 21:51:10224semak imbas

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

atau, kita boleh menggunakan kata kunci lalai:

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

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