簡體   English   中英

為什么這個C#代碼沒有編譯?

[英]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

因此, doublenull之間顯然沒有隱式轉換(事實上, Structnull之間沒有隱式轉換)。

你可以做的是明確告訴編譯器兩個表達式中的一個可以相互轉換。

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 : BAB的類型必須相同,或者必須可以隱式轉換為另一個。

因為編譯器無法弄清楚null和1.0是否兼容,所以需要將值轉換為double?。 這需要明確說明。

double? test = true ? (double?) null : 1.0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM