Rumah >pembangunan bahagian belakang >C++ >Mengapa `getBoolValue ()? 10: Null` Dilarang dalam pengendali C# Ternary?

Mengapa `getBoolValue ()? 10: Null` Dilarang dalam pengendali C# Ternary?

Susan Sarandon
Susan Sarandonasal
2025-01-28 22:07:16831semak imbas

Why is `GetBoolValue() ? 10 : null` Forbidden in a C# Ternary Operator?

c# ternary operator dan bilangan bulat yang tidak dapat dipertahankan: Kenapa gagal ? 10 : null

operator C# ternary () memerlukan kedua -dua

dan condition ? value1 : value2 mempunyai jenis yang serasi. Mari kita periksa mengapa kod berikut menghasilkan ralat pengkompil: value1 value2

Mesej ralat, "Jenis ekspresi bersyarat tidak dapat ditentukan kerana tidak ada penukaran tersirat antara 'int' dan '
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
'", menyoroti masalah teras. Pengkompil menafsirkan

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

Penyelesaian:

Untuk membetulkannya, kita mesti memastikan konsistensi jenis. Berikut adalah beberapa pendekatan:

  1. secara eksplisit melemparkan 10 ke integer yang tidak dapat dibatalkan (

    ): int?

    Ini secara eksplisit memberitahu pengkompil bahawa
    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    harus dianggap sebagai integer yang tidak dapat dipertahankan, yang membolehkan

    menjadi cawangan kedua yang sah. 10 null

  2. Explicitly cast

    ke integer yang tidak dapat dibatalkan: null

    Ini secara eksplisit membuang
    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    ke

    , menjadikan kedua -dua belah pengendali ternary serasi. null int?

  3. Gunakan nilai lalai untuk

    : int?

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
    Menilai ke

    , menyediakan cara yang selamat untuk mewakili kes null. Ini sering disukai untuk kejelasan. default(int?) null

  4. ketiga -tiga penyelesaian mencapai hasil yang sama:
akan diberikan sama ada

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

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