ホームページ >バックエンド開発 >C++ >なぜ「?10:null」は、c#でnullableタイプで失敗するのですか?

なぜ「?10:null」は、c#でnullableタイプで失敗するのですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-28 22:10:10989ブラウズ

Why Does

3つの元コンピューティングシンボルと空のタイプ:「?10:null」の謎を解きます

空のタイプを扱うとき、それらが式の他のデータ型と互換性があることを理解します。一般的なシナリオは、偶発的なエラーを引き起こす可能性があります。つまり、3つの-YUANコンピューティングシンボルは、空のタイプと非空のタイプと一緒に使用されます。

次のコードフラグメントを検討してください:

<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>
ここでの目標は次のとおりです。

を返す場合、値10は空の整数に割り当てられます。ただし、コンパイラにはエラーがマークされます:GetBoolValue() true x質問の解釈xnull

このエラーは、3つのYUAN式の非一致タイプの問題を強調しています。左式は
<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>
値を返し、解析は

またはです。正しい表現は、2つの式を組み合わせようとします:

、これはリテラルボリュームです(GetBoolValue()ではありません)。 bool true、これは空の言葉です。 false

    コンパイラは最初に正しい式を評価しようとします。 literal
  • と空のキャラクター10に遭遇します、それらは互換性がありません。 intおよび隠された変換を定義しないため、不完全な種類のタイプが生じます。 int?
  • タイプを解くことは一致しません
  • null この問題を解決するには、正しい式を空のタイプのタイプと互換性がある必要があります。いくつかの方法があります:

は文字通りint10nullに変換しました int null

空のタイプまたはデフォルト値を使用します:

    暗黙的な変換
  • 受け入れられる答えに記載されている隠された変換は次のとおりです。 int?

    to
    <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>
  • non -empty
は、空に変換できます

正しい式のタイプと互換性があることにより、タイプが問題と一致しないという問題を解決し、

返品値に従って適切な値を分配できます。

以上がなぜ「?10:null」は、c#でnullableタイプで失敗するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。