Ответ 1
В принципе, это будет полезно только разработчикам с испорченными реализациями Equals
. Из документации:
Следующие утверждения должны быть верны для всех реализаций метода
Equals(Object)
. В спискеx
,y
иz
представляют ссылки на объекты, которые не являются нулевыми.
- [...]
x.Equals(y)
возвращает то же значение, что иy.Equals(x)
.- [...]
Таким образом, проверка избыточна в каждом случае, когда метод был правильно реализован, что приводит к поражению производительности каждому разработчику, который поступил правильно.
Это не очень полезно разработчикам, которые не поступили правильно, поскольку они могут ожидать, что object.Equals(x, y)
вернет true
, когда он вернет false
, - они могут отлаживать и обнаруживать, что их метод возвращает правда, в конце концов. Вы могли бы сказать, что это будет документировано, чтобы проверить оба пути раунда - но мы уже установили, что единственными разработчиками, которые это затрагивают, являются те, кто не читает документацию в любом случае.
В принципе, когда вы переопределяете метод или реализуете интерфейс, вы должны знать, что вы делаете, и подчиняться указанному контракту. Если вы этого не сделаете, вы получите странное поведение, и я не думаю, что разумно ожидать, что каждый вызывающий пользователь попытается обойти реализации, которые не выполняют то, что они предназначены.