C# の値型との Null 比較を理解する
C# では、値型との null 比較が許可されていますが、一見直感に反していますが、コンパイラのインテリジェントな演算子のオーバーロード解決に由来しています。 コンパイラは、コンテキストに基づいて最も適切なオーバーロードされた演算子を選択します。
次の例を考えてみましょう:
<code class="language-C#">Int32 x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
コンパイラーは、これを、null 許容整数 (==
) 用に設計されたオーバーロードされた int?
演算子を使用した比較として解釈します。 Int32
変数 x
は暗黙的に null 許容整数に変換され、null
リテラルも null 許容整数として扱われます。 したがって、比較は有効ですが、常に false
.
値の型を別の型のリテラルと比較する場合にも、同じ原則が適用されます。
<code class="language-C#">if (x == 12.6)</code>
ここで、コンパイラは、==
と double
に対してオーバーロードされた double?
演算子を利用します。 x
は double
に変換され、リテラル 12.6
も double
になります。 繰り返しますが、比較は有効であり、結果は false
.
演算子のオーバーロードにおけるこの柔軟性により、コードの簡潔さと読みやすさが向上します。 ただし、プログラマは予期しない動作の可能性に留意し、これらの比較を慎重に使用する必要があります。
以上がC# で値の型の比較に Null が許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。