首頁 > 後端開發 > C++ > 為什麼`getBoolValue()? 10:c#三元操作員中的null`禁止?

為什麼`getBoolValue()? 10:c#三元操作員中的null`禁止?

Susan Sarandon
發布: 2025-01-28 22:07:16
原創
827 人瀏覽過

Why is `GetBoolValue() ? 10 : null` Forbidden in a C# Ternary Operator?

c#ternary操作員和無效整數:為什麼? 10 : null

condition ? value1 : value2c#ternary operator(value1)都要求value2

>具有兼容類型。 讓我們檢查為什麼以下代碼會產生編譯器錯誤:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
登入後複製

錯誤消息“無法確定條件表達式的類型,因為'int'和'10'之間沒有隱含的轉換,”突出顯示了核心問題。 編譯器將int解釋為null>和nullas,嗯,int(在此上下文中代表缺乏值)。 由於

和空值之間沒有自動轉換,因此編譯器無法推斷出三元表達式的結果類型。

>解決方案:

為了解決此問題,我們必須確保類型一致性。這是幾種方法:

  1. 明確地將10鑄成一個無效的整數():int?

    >
    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    登入後複製

    這明確地告訴編譯器,應將10視為無效整數,允許null>是有效的第二個分支。

  2. >明確施放到一個無效的整數:null>

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    登入後複製
    這個明確施放

    >> null,使三元運算符的雙方兼容。 int?

  3. >使用的默認值:int?>

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
    登入後複製

    >評估default(int?),提供了一種類型安全的方式來表示無效情況。 這通常是明確的首選。 null

所有三個解決方案都取得了相同的結果:

將根據x的結果分配10(作為int?)或null>。 關鍵是要確保三元運算符的兩個分支具有相同的兼容類型。 使用GetBoolValue()>關鍵字通常被認為是最可讀和可維護的解決方案。 >

以上是為什麼`getBoolValue()? 10:c#三元操作員中的null`禁止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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