3つの元コンピューティングシンボルと空のタイプ:「?10:null」の謎を解きます
次のコードフラグメントを検討してください:
<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>ここでの目標は次のとおりです。
を返す場合、値10は空の整数に割り当てられます。ただし、コンパイラにはエラーがマークされます:GetBoolValue()
true
x
質問の解釈x
null
<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>値を返し、解析は
またはです。正しい表現は、2つの式を組み合わせようとします:
、これはリテラルボリュームです(GetBoolValue()
ではありません)。 bool
true
、これは空の言葉です。 false
10
に遭遇します、それらは互換性がありません。 int
および隠された変換を定義しないため、不完全な種類のタイプが生じます。 int?
null
この問題を解決するには、正しい式を空のタイプのタイプと互換性がある必要があります。いくつかの方法があります:
は文字通りint
:10
null
に変換しました
int
null
空のタイプまたはデフォルト値を使用します:
受け入れられる答えに記載されている隠された変換は次のとおりです。
int?
<code class="language-c#"> x = GetBoolValue() ? (int?)10 : null;</code>:
に暗黙的に変換できます。
to<code class="language-c#"> x = GetBoolValue() ? 10 : (int?)null; x = GetBoolValue() ? 10 : default(int?);</code>:
。
正しい式のタイプと互換性があることにより、タイプが問題と一致しないという問題を解決し、返品値に従って適切な値を分配できます。
以上がなぜ「?10:null」は、c#でnullableタイプで失敗するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。