Pertimbangkan serpihan kod berikut:
<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>
pulangan GetBoolValue()
, nilai 10 diberikan kepada integer kosong true
; Walau bagaimanapun, pengkompil akan menandakan ralat: x
x
null
Tafsiran Soalan
<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>
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
).
10
int
pengkompil pertama cuba menilai ekspresi yang betul. Ia bertemu literal int?
dan aksara kosong null
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>
to :
Jenis kosong<code class="language-c#"> x = GetBoolValue() ? 10 : (int?)null; x = GetBoolValue() ? 10 : default(int?);</code>
to :
non -emptyboleh ditukar kepada kosong
.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!