1. ホーム
  2. c#

null値に対して==はtrueを返すのに、>=はなぜfalseを返すのですか?

2023-09-22 12:51:45

疑問点

int型(またはNullable<int>)の変数が2つあります。2 つの変数について、大なり小なり (>=) 比較をしたかったのですが、結論から言うと、両方の変数が NULL の場合、これは false を返しますが、明らかに == 演算子は true を返します。

誰か、>= 演算子の意味的な定義に "or" という単語が含まれているので、それが論理的である理由を説明していただけませんか?

どのように解決するのですか?

この機能が最初に C# 2.0 で設計されたとき、この奇妙な点について大きな議論がありました。問題は、C# ユーザーがこれが意味を持つことに完全に慣れてしまっていることです。

if(someReference == null)

null可能な値型に等式を拡張する場合、以下の選択肢がある。

  1. null可能な等式は、真に 持ち上がり . オペランドの一方または両方が NULL の場合、結果は真でも偽でもなく、NULL です。この場合、以下のどちらかになります。

    • a) null可能な値型の等式を持つことを違法とする。 if 文の中で if ステートメントに必要なのは bool であって nullable bool ではないからです。 その代わりに、すべての人が HasValue を使うようにします。これは冗長でイライラさせます。

    • b) 自動的にnullをfalseに変換する。 これの欠点は x==null がxがnullの場合にfalseを返すことです。これは混乱を招き、参照型でのnull比較の人々の理解に対して働きます。

  2. Nullableな等式は解除されない。nullable equalityはtrueかfalseのどちらかで、nullとの比較はnull checkとなります。このため、nullable equalityはnullable inequalityと矛盾している。

これらの選択肢はどれも明らかに正しいとは言えず、すべてに長所と短所があります。たとえば、VBScript は 1b を選択します。多くの議論の後、C# 設計チームは #2 を選択しました。