Каков ваш подход при написании проверок равенства для structs
и classes
, которые вы создаете?C# проверка равенства
1) Требует ли «полное» равенство проверки того, что большая часть шаблонного кода (например, override Equals
, override GetHashCode
, общий Equals
, operator==
, operator!=
)?
2) Вы конкретно указываете, что ваши классы моделируют интерфейс IEquatable<T>
?
3) Правильно ли я понимаю, что нет никакого фактического способа автоматического применения Equals
переопределения, когда я призываю что-то вроде a == b
и я всегда должен реализовать оба Equals
и operator==
членов?
^^ Вашего каждого сообщения это учебная глава C# .. :) – Dienekes
2 второстепенных предложения для второго кодового блока: 1) Разве вы не должны перемещать '(object) left == (object) right' из' == 'в общий' Equals'? Это дает скорость (конечно, это зависит, но в худшем случае) проверка ссылочного равенства даже для общего метода «Равно»? 2) вам не нужна вторая нулевая проверка '(object) right == null' в' == ', поскольку вы по существу делаете это в родовом' Equals'. См. Мой пост .. – nawfal
@nawfal: Я не думаю, что в общем случае «Equals» есть много смысла - все равно будет быстро в тех случаях, когда оно * верно, а для случаев, когда оно * не * true, это добавляет дополнительную проверку без каких-либо преимуществ. Что касается нулевой части - это потребует проверки динамического типа. Да, вы можете поспорить обоим - но я доволен тем, что я написал два года назад ... –