ホームページ > バックエンド開発 > C++ > `getBoolValue()がなぜですか? 10:null` C#Ternaryオペレーターで禁止されていますか?

`getBoolValue()がなぜですか? 10:null` C#Ternaryオペレーターで禁止されていますか?

Susan Sarandon
リリース: 2025-01-28 22:07:16
オリジナル
827 人が閲覧しました

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

C#Ternary OperatorとNullable Integers:なぜ? 10 : null失敗します

condition ? value1 : value2の両方が互換性のある型を持つことを要求しています。 次のコードがコンパイラエラーを生成する理由を調べてみましょう:value1 value2 エラーメッセージ「条件式のタイプは、「int」と '
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
ログイン後にコピー
'の間に暗黙的な変換がないため決定できません」と、コアの問題を強調しています。 コンパイラは、

および10として解釈されます。 intとnull値との間に自動変換がないため、コンパイラは結果のタイプの三元式を推測できません。 nullnullソリューション:int

これを修正するには、タイプの一貫性を確保する必要があります。ここにいくつかのアプローチがあります:

明示的に10をnullable整数(

)にキャストします
  1. これは、

    は有効な2番目のブランチになるように、は無駄な整数として扱われるべきであることをコンパイラに明示的に伝えます。 int?

    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    ログイン後にコピー
    明示的に

    にnullable整数にキャストされます:10null

  2. これは明示的に
  3. から

    に鋳造され、三元演​​算子の両側に互換性があります。 null

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    ログイン後にコピー

    nullのデフォルト値を使用します int?

  4. に評価され、ヌルの場合を表すタイプに安全な方法を提供します。 これはしばしば明確にするために好まれます。

    int? 3つのソリューションすべてが同じ結果を達成します。

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
    ログイン後にコピー
    )または

    のいずれかがdefault(int?)またはnullの結果に基づいて割り当てられます。 重要なのは、三元演算子の両方の分岐が同じ互換性のあるタイプを確実に持つことです。

    キーワードを使用することは、通常、最も読みやすく保守可能なソリューションと見なされます。

以上が`getBoolValue()がなぜですか? 10:null` C#Ternaryオペレーターで禁止されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート