首頁 >後端開發 >C++ >為什麼'?10:null”在C#中失敗的類型失敗?

為什麼'?10:null”在C#中失敗的類型失敗?

Susan Sarandon
Susan Sarandon原創
2025-01-28 22:10:101007瀏覽

Why Does

三元運算符與可空類型:解開“?10:null”的謎團

在處理可空類型時,理解它們在表達式中與其他數據類型的兼容性至關重要。一個常見的場景會導致意外錯誤,那就是將三元運算符與可空類型和非可空類型一起使用。

考慮以下代碼片段:

<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>

這裡的目標是:如果 GetBoolValue() 返回 true,則將值 10 賦給可空整數 x;否則,x 保持為 null。但是,編譯器會標記一個錯誤:

<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>

問題解讀

此錯誤突出了三元表達式中類型不匹配的問題。左側表達式 GetBoolValue() 返回一個 bool 值,解析為 truefalse。右側表達式嘗試組合兩個表達式:

  • 10,這是一個 int 字面量(不是 int?)。
  • null,這是一個空字面量。

編譯器首先嘗試評估右側表達式。它遇到 int 字面量 10 和空字面量 null,它們是類型不兼容的。 intnull 之間沒有定義隱式轉換,導致類型不兼容錯誤。

解決類型不匹配

為了解決這個問題,需要使右側表達式與可空類型兼容。有幾種方法:

  • 將字面量強制轉換為 int?

    <code class="language-c#">  x = GetBoolValue() ? (int?)10 : null;</code>
  • 使用空字面量或默認值:

    <code class="language-c#">  x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);</code>

隱式轉換

在已接受的答案中提到的隱式轉換是:

  • int?null 可空類型 int? 可以隱式轉換為 null
  • intint? 非可空 int 可以隱式轉換為可空 int?

通過使右側表達式與可空類型兼容,您可以解決類型不匹配問題,並根據 GetBoolValue() 的返回值分配適當的值。

以上是為什麼'?10:null”在C#中失敗的類型失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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