Вы не должны перегружать == это приводит к неинтуитивному коду. Просто придерживайтесь переопределения Equals (и GetHashCode)
Взято из Оператор перегрузки == по сравнению с Equals () (ответ Самуэля Неффа)
Когда у вас есть выражение
x == y
Метод, который будет использоваться для сравнения переменных x и y, определяется во время компиляции. Это перегрузка оператора. Тип, используемый при объявлении x и y, используется для определения метода, используемого для их сравнения. Фактический тип в пределах x и y (т.е. подкласс или реализация интерфейса) не имеет значения. Обратите внимание на следующее.
object x = "hello"; object y = 'h' + "ello"; // ensure it's a different reference
x == y // evaluates to FALSE
и следующие
string x = "hello"; string y = 'h' + "ello"; // ensure it's a different reference
x == y // evaluates to TRUE
Это демонстрирует, что тип, используемый для объявления переменных x и y, используется для определения того, какой метод используется для оценки ==.
Для сравнения Equals определяется во время выполнения на основе фактического типа в переменной x. Equals - это виртуальный метод объекта, который другие типы могут переопределять и переопределяют. Следовательно, оба следующих двух примера имеют значение true.
object x = "hello"; object y = 'h' + "ello"; // ensure it's a different reference
x.Equals(y) // evaluates to TRUE
и следующие
string x = "hello"; string y = 'h' + "ello"; // ensure it's a different reference
x.Equals(y) // also evaluates to TRUE
person
Rich O'Kelly
schedule
17.11.2011