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 でないときに通常の比較を行う。