c# ternary operator dan bilangan bulat yang tidak dapat dipertahankan: Kenapa gagal ? 10 : null
dan condition ? value1 : value2
mempunyai jenis yang serasi. Mari kita periksa mengapa kod berikut menghasilkan ralat pengkompil: value1
value2
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
sebagai 10
sebagai, baik, int
(yang dalam konteks ini mewakili ketiadaan nilai). Oleh kerana tidak ada penukaran automatik antara null
dan nilai null, pengkompil tidak dapat menyimpulkan jenis ekspresi ternary yang terhasil. null
int
Untuk membetulkannya, kita mesti memastikan konsistensi jenis. Berikut adalah beberapa pendekatan:
): int?
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
menjadi cawangan kedua yang sah. 10
null
ke integer yang tidak dapat dibatalkan: null
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
, menjadikan kedua -dua belah pengendali ternary serasi. null
int?
: int?
<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
, menyediakan cara yang selamat untuk mewakili kes null. Ini sering disukai untuk kejelasan. default(int?)
null
(sebagai x
) atau 10
berdasarkan hasil int?
. Kuncinya adalah untuk memastikan kedua -dua cabang pengendali ternary mempunyai jenis yang sama dan serasi. Menggunakan kata kunci null
umumnya dianggap sebagai penyelesaian yang paling mudah dibaca dan dikekalkan. GetBoolValue()
Atas ialah kandungan terperinci Mengapa `getBoolValue ()? 10: Null` Dilarang dalam pengendali C# Ternary?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!