В основном это делает три вещи:
- Проверка на равенство ссылок (верните true, если так)
- Проверка на нулевую ссылку (возвращает false, если любое из значений равно нулю; к настоящему моменту обработан нулевой == нулевой регистр)
- Проверка на равенство значений с
first.Equals(second)
Порядок не должен иметь значения , если оба значения имеют хорошо реализованные реализации равенства, поскольку равенство должно быть реализовано таким образом, чтобы x.Equals(y)
подразумевало y.Equals(x)
. Однако в автономной документации, которую я установил, указано, что first.Equals (second) (или objA.equals (objB) для использования реального именования параметров) указан. онлайн документация не упоминает об этом, достаточно интересно.
Просто чтобы сделать все это конкретным, реализация может выглядеть следующим образом:
public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}