C# における Nullable<T>
の大小比較について
Nullable<T>
(int?
など) の大小の比較をする際に、片方が null
の場合の挙動がいつもわからなくなるので調べたメモ。
たとえば、以下の関数を考える。
bool Hoge(int? x, int? y)
{
return x < y;
}
この関数をコンパイルすると、以下のようになる。
private bool Hoge(Nullable<int> x, Nullable<int> y)
{
Nullable<int> num = x;
Nullable<int> num2 = y;
return (num.GetValueOrDefault() < num2.GetValueOrDefault()) & (num.HasValue & num2.HasValue);
}
つまり、x, y のどちらか一方でも null
の場合はつねに false
を返し、両方が null
でないときに通常の比較を行う。