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中文網其他相關文章!