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 operat
It's a bad idea to overload operators on classes. It's ok for structs though.
If you do decide to overload an operator on a class, you will either have to:
a. Include null-check into your logic
b. Throw exceptions when null is passed in
c. Don't null check and allow for NullReferenceExceptions (bad)
Basically, it's a bad idea to overload an operator on a class. I'd either turn your class into a struct, or just implement an interface such as IComparable<T>
/ IEquatable<T>
which has guidelines when null values are used in comparisons.
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.
Personally I would throw a ArgumentNullException if either x
or y
are null
, which should be an exceptional circumstance.
A custom operator is little more than a static method. Moreover, operators in generals shouldn't normally throw exceptions. Which means you need those null-checks if MyClass
is a reference-type.
By the way, it's conventional for nulls
to be less than non-nulls
, which makes your proposed implementation idiomatic.
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.