Ответ 1
В основном это делает три вещи:
- Проверьте ссылочное равенство (верните true, если да)
- Проверьте ссылочную недействительность (верните false, если значение равно NULL, к тому же был обработан случай null == null)
- Проверьте равенство значений с помощью
first.Equals(second)
Упорядочение не должно иметь значения, если оба значения имеют хорошо выполненные реализации равенства, поскольку равенство должно быть реализовано таким образом, что x.Equals(y)
подразумевает y.Equals(x)
. Однако автономная документация, которую я установил, указывает на то, что first.Equals(второй) (или 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.
}