首頁 >後端開發 >C++ >為什麼是`? 10:null` c#c#ternary operators in Able -nullable類型的禁止?

為什麼是`? 10:null` c#c#ternary operators in Able -nullable類型的禁止?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-28 21:51:10174瀏覽

Why is `? 10 : null` Forbidden in C# Ternary Operators with Nullable Types?

C#三元運算符與可空類型:為什麼? 10 : null 會報錯?

在C#中使用可空類型時,表達式內的類型一致性至關重要。三元運算符(? :)根據條件評估兩個表達式,如果條件為真則返回第一個表達式的結果,否則返回第二個表達式的結果。

考慮以下代碼片段:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; // 错误</code>

這裡,我們試圖將int和null賦值給可空int變量x。這會引發編譯器錯誤,因為這兩種類型之間沒有隱式轉換。

編譯器首先嘗試評估右側表達式:

<code class="language-csharp">GetBoolValue() ? 10 : null</code>

字面量10是int類型,而null是空字面量。兩者之間沒有隱式轉換,因此出現錯誤。

為了解決這個問題,我們可以執行顯式轉換以確保類型一致性:

<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null; // 将10转换为int?</code>

或者,我們可以將空字面量轉換為int?:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null; // 将null转换为int?</code>

或者,我們可以使用default關鍵字:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?); // 将x初始化为null</code>

通過確保類型一致性,我們可以避免編譯器錯誤並保持可空類型的完整性。

以上是為什麼是`? 10:null` c#c#ternary operators in Able -nullable類型的禁止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn