В основном:
myObject.NonNullProperty.Equals(null); // works ...
... потому что a) я могу вызвать Equals для этого свойства (которое не является нулевым) и b) Equals принимает null
без выдачи исключения.
myObject.NullProperty.Equals(anotherObject); // fails ...
... потому что (учитывая NullProperty
это null
), вы не можете вызвать метод экземпляра (здесь: "равно"), если нет экземпляра какого-либо объекта.
Возможный обходной путь:
if( myObject.MayBeNullProp != null && // stops evaluating here if false
theOtherObject.MayBeNullProp != null && // stops evaluating here if false
myObject.MayBeNullProp.Equals(theOtherObject.MayBeNullProp) )
{
// Executed if both are != null and equal
}