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

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

Susan Sarandon
發布: 2025-01-28 22:10:10
原創
1005 人瀏覽過

Why Does

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

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

考慮以下代碼片段:

int? x = GetBoolValue() ? 10 : null;
登入後複製

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

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

問題解讀

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

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

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

解決類型不匹配

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

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

      x = GetBoolValue() ? (int?)10 : null;
    登入後複製
  • 使用空字面量或默認值:

      x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);
    登入後複製

    隱式轉換

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

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

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板