Rumah >pembangunan bahagian belakang >C++ >Kenapa operator C# ternary saya gagal dengan jenis yang boleh dibatalkan: `getBoolValue ()? 10: Null`?

Kenapa operator C# ternary saya gagal dengan jenis yang boleh dibatalkan: `getBoolValue ()? 10: Null`?

Barbara Streisand
Barbara Streisandasal
2025-01-28 22:14:11580semak imbas

Why Does My C# Ternary Operator Fail with Nullable Types: `GetBoolValue() ? 10 : null`?

c# jenis nullable dan pengendali ternary: Menyelesaikan jenis ketidakkonsistenan

di C#, menggunakan pengendali ternary () dengan jenis yang boleh dibatalkan (seperti

) boleh membawa kepada kesilapan "jenis ekspresi bersyarat tidak dapat ditentukan ...". Ini berlaku apabila cawangan sebenar dan palsu pengendali ternary mempunyai jenis yang tidak serasi. Sebagai contoh, ? : gagal kerana int? adalah GetBoolValue() ? 10 : null dan 10 mewakili ketiadaan nilai. Pengkompil tidak dapat memutuskan satu jenis untuk ekspresi. int null Masalahnya berpunca daripada keperluan pengendali ternary untuk jenis pulangan yang konsisten. Walaupun

boleh diberikan kepada integer yang tidak dapat dibatalkan (), polos

tidak dapat secara tersirat menjadi null. int? int Berikut adalah beberapa cara untuk membetulkannya: int?

    Cast Explicit to Integer Nullable:
  1. Cast integer literal ke

    : int?

    <code class="language-csharp">x = GetBoolValue() ? (int?)10 : null;</code>
  2. penukaran null eksplisit:
  3. Explicitly cast

    to : null int?

    <code class="language-csharp">x = GetBoolValue() ? 10 : (int?)null;</code>
  4. Menggunakan kata kunci
  5. :

    Kata kunci menyediakan cara yang selamat untuk mendapatkan nilai lalai untuk jenis, iaitu default untuk jenis nullable: default null

    <code class="language-csharp">x = GetBoolValue() ? 10 : default(int?);</code>
    Penyelesaian ini memastikan konsistensi jenis, yang membolehkan pengkompil dengan betul menyimpulkan jenis ekspresi ternary sebagai
  6. , dengan itu menyelesaikan kesilapan kompilasi. Pilih kaedah yang paling sesuai dengan gaya pengekodan dan pilihan kebolehbacaan anda.

Atas ialah kandungan terperinci Kenapa operator C# ternary saya gagal dengan jenis yang boleh dibatalkan: `getBoolValue ()? 10: Null`?. 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