Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

needs overload operator< and null check

I´m overloading the lessthan-operator in c# and I`m wondering whether this needs to check for null. Below you can find an Example:

public static bool operator <(MyClass x, MyClass y)
{
  if (x == null && y == null)
  {
    return false;
  }
  if (x == null)
  {
    return true; //false?
  }
  if (y == null)
  {
    return false; //true?
  }
  return x.Value < y.Value;
}

Or is this correct:

public static bool operator <(MyClass x, MyClass y)
{
  return x.Value < y.Value;
}

I didn´t find any instruction on this. But maybe I missed something.

like image 231
Lukas Avatar asked Mar 08 '12 13:03

Lukas


2 Answers

The answer depends on your intended usage pattern. If you plan to have nulls in the mix, and you would like to consider null values to be less than non-null values, then your implementation is correct; if you would like to consider null values to be greater than non-null objects, then the commented out return values (false and true) should be used instead. If you do not plan to allow nulls in the mix, throwing an ArgumentNullException or allowing NullReferenceException would be the right choice.

like image 189
Sergey Kalinichenko Avatar answered Nov 15 '22 18:11

Sergey Kalinichenko


Both approaches are correct (for different values of correct).

If x or y are likely to be null and that has a valid meaning in your case then go with the first approach.

If x and y are highly unlikely to be null then go with the second and let any exceptions propagate to the calling code for handling.

like image 25
ChrisF Avatar answered Nov 15 '22 20:11

ChrisF