atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

Nullableと3値論理

.NETのNullableの比較について記憶できないのでメモ。

nullと非nullの比較

int? value1 = null;
int? value2 = 10;

だと

結果
value1 < value2 false
value1 <= value2 false
value1 == value2 false
value1 != value2 true
value1 > value2 false
value1 >= value2 false

nullとnullの比較

int? value1 = null;
int? value2 = null;

だと

結果
value1 < value2 false
value1 <= value2 false
value1 == value2 true
value1 != value2 false
value1 > value2 false
value1 >= value2 false

考察

どうやら次のような感じか。

  • 「==」や「!=」での比較は、SQLにおけるIS NULL的にちゃんと行われる。
  • 「>」や「<」などによる大小の比較は、nullが混じった時点で常にfalseを返す。

感想

試す前はSQL3値論理的なノリで、nullが混じった時点で全部falseかと思ったが、実際には違った。書いていて思ったけど3値論理関係ないですね。単なるNULLの特性の話ですね。

間違いなく言えることは、このエントリーの内容に依存したコードとか書いちゃダメ!!ちゃんとnullチェックしましょう。