Rumah > pembangunan bahagian belakang > C++ > Kenapa '? 10: NULL' gagal dengan jenis yang tidak dapat dibatalkan di C#?

Kenapa '? 10: NULL' gagal dengan jenis yang tidak dapat dibatalkan di C#?

Susan Sarandon
Lepaskan: 2025-01-28 22:10:10
asal
983 orang telah melayarinya

Why Does

Tiga simbol pengkomputeran yuan dan jenis kosong: Selesaikan misteri "? 10: null"

Apabila berurusan dengan jenis kosong, memahami bahawa mereka bersesuaian dengan jenis data lain dalam ekspresi. Satu senario yang biasa boleh menyebabkan kesilapan yang tidak disengajakan, iaitu, simbol pengkomputeran tiga -YUAN digunakan bersama -sama dengan jenis kosong dan jenis yang tidak.

Pertimbangkan serpihan kod berikut:

<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>
Salin selepas log masuk
Matlamat di sini adalah: jika

pulangan GetBoolValue(), nilai 10 diberikan kepada integer kosong true; Walau bagaimanapun, pengkompil akan menandakan ralat: x x null Tafsiran Soalan

<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>
Salin selepas log masuk

Ralat ini menyoroti masalah jenis bukan penampakan dalam ungkapan tiga -yuan. Ekspresi kiri mengembalikan nilai , dan parsing adalah atau

. Ekspresi yang betul cuba menggabungkan dua ungkapan:

GetBoolValue() bool , ini adalah true volume literal (tidak false).

    , ini adalah perkataan kosong.
  • 10 int pengkompil pertama cuba menilai ekspresi yang betul. Ia bertemu literal int? dan aksara kosong
  • , mereka tidak serasi.
  • dan tidak menentukan penukaran tersembunyi, mengakibatkan jenis jenis yang tidak lengkap. null
  • menyelesaikan jenis tidak sepadan

int Untuk menyelesaikan masalah ini, ungkapan yang betul perlu bersesuaian dengan jenis jenis kosong. Terdapat beberapa cara: <:> 10 null int ditukar secara harfiah ke null:

Gunakan jenis kosong atau nilai lalai:

  • int? penukaran tersirat

    <code class="language-c#">  x = GetBoolValue() ? (int?)10 : null;</code>
    Salin selepas log masuk
    penukaran tersembunyi yang disebut dalam jawapan yang boleh diterima ialah:
  • to :

    Jenis kosong
    <code class="language-c#">  x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);</code>
    Salin selepas log masuk
    boleh ditukar secara tersirat ke
  • .

to :

non -empty

boleh ditukar kepada kosong

.
  • Dengan serasi dengan jenis ungkapan yang betul, anda boleh menyelesaikan masalah yang jenisnya tidak sepadan dengan masalah dan mengedarkan nilai yang sesuai mengikut nilai pulangan int?. null

Atas ialah kandungan terperinci Kenapa '? 10: NULL' gagal dengan jenis yang tidak dapat dibatalkan di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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