Cisis - C##

ASP.NET Core 開発者のブログ

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