[英]Why doesn't this C# code compile?
double? test = true ? null : 1.0;
在我的書中,這是一樣的
if (true) {
test = null;
} else {
test = 1.0;
}
但是第一行給出了這個編譯錯誤:
無法確定條件表達式的類型,因為'
<null>
'和'double
'之間沒有隱式轉換。
發生這種情況是因為編譯器嘗試從右到左計算語句。 這意味着它看到1.0
並且它決定它是double(不是double?)然后它看到null
。
因此, double
和null
之間顯然沒有隱式轉換(事實上, Struct
和null
之間沒有隱式轉換)。
你可以做的是明確告訴編譯器兩個表達式中的一個可以相互轉換。
double? test = true ? null : (double?) 1.0; // 1
double? test = true ? (double?)null : 1.0; // 2
double? test = true ? default(double?) : 1.0; // 3
double? test = true ? new double?() : 1.0; // 4
double? test = true ? (double?)null : 1.0;
將工作。 那是因為沒有從第一個表達式( null
)的類型到第二個表達式( double
)的類型的轉換。
在推導出?:表達式的類型時,不使用賦值的左側。
在b ? A : B
b ? A : B
, A
和B
的類型必須相同,或者必須可以隱式轉換為另一個。
因為編譯器無法弄清楚null和1.0是否兼容,所以需要將值轉換為double?。 這需要明確說明。
double? test = true ? (double?) null : 1.0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.