183

私はnull許容型を学び始めており、次の動作に遭遇しました。

nullable int を試しているときに、比較演算子が予期しない結果をもたらすことがわかりました。たとえば、以下のコードでは、「両方と 1 が等しい」という出力が得られます。「null」も出力されないことに注意してください。

int? a = null;
int? b = 1;

if (a < b)
    Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
    Console.WriteLine("{0} is bigger than {1}", a, b);
else
    Console.WriteLine("both {0} and {1} are equal", a, b);

負でない整数がnullより大きいことを望んでいました。ここに何か不足していますか?

4

4 に答える 4

37

要約すると、両方のオペランドが null の場合でも、null ( >=<<=>) との不等比較は返されます。falseすなわち

null >  anyValue //false
null <= null     //false

==null ( , )を使用した等価または非等価の比較は、 !=「期待どおり」に機能します。すなわち

null == null     //true
null != null     //false
null == nonNull  //false
null != nonNull  //true
于 2016-12-09T01:09:24.213 に答える