Основная причина - производительность. Когда дженерики были представлены в .NET 2.0, они смогли добавить кучу классных классов, таких как List<T>
, Dictionary<K,V>
, HashSet<T>
и т. Д. В этих структурах интенсивно используются GetHashCode
и Equals
. Но для типов значений это обязательный бокс. IEquatable<T>
позволяет структуре реализовывать строго типизированный метод Equals
, поэтому никакой упаковки не требуется. Таким образом, гораздо лучшая производительность при использовании типов значений с универсальными коллекциями.
Ссылочные типы не приносят такой большой пользы, но реализация IEquatable<T>
позволяет вам избежать приведения из System.Object
, который может иметь значение, если он вызывается часто.
Как отмечено в блоге Джареда Парсона , вы все равно должны реализовать переопределения объектов.