Just reading the msdn article on overriding equality operators here
The following snippet confuses me…
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((System.Object)p == null) // <-- wtf?
{
return false;
}
Why is there a cast to Object here to perform the null comparison?
Operators apply through static analysis (and overloads), not virtual methods (overrides). With the cast, it is doing a reference equality check. Without the cast, it can run the
TwoDPointoperator. I guess this is to avoid problems when an operator is added.Personally, though, I’d do a reference check explicitly with
ReferenceEquals.