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
Lepaskan: 2025-01-28 22:07:16
asal
827 orang telah melayarinya

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>
Salin selepas log masuk
'", 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>
    Salin selepas log masuk
    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>
    Salin selepas log masuk
    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>
    Salin selepas log masuk
    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!

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