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値との間に自動変換がないため、コンパイラは結果のタイプの三元式を推測できません。
null
null
ソリューション:int
明示的に10をnullable整数(
)にキャストしますは有効な2番目のブランチになるように、は無駄な整数として扱われるべきであることをコンパイラに明示的に伝えます。
int?
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
にnullable整数にキャストされます:10
null
に鋳造され、三元演算子の両側に互換性があります。
null
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
null
のデフォルト値を使用します
int?
int?
3つのソリューションすべてが同じ結果を達成します。
<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
のいずれかがdefault(int?)
またはnull
の結果に基づいて割り当てられます。 重要なのは、三元演算子の両方の分岐が同じ互換性のあるタイプを確実に持つことです。
以上が`getBoolValue()がなぜですか? 10:null` C#Ternaryオペレーターで禁止されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。