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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With