IStructuralEquatable против равных? - PullRequest
21 голосов
/ 03 марта 2012

в соответствии с MSDN

IStructuralEquatable

Определяет методы для поддержки сравнения объектов для структурных равенство. Структурное равенство означает, что два объекта равны, потому что они имеют равные значения. Это отличается от эталонного равенства, которое указывает, что две ссылки на объекты равны, потому что они ссылаются тот же физический объект.

Разве это не то, что Equals должен делать? (при переопределении IEquatable)?

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Причина, по которой вам нужен IStructuralEquatable, заключается в определении нового способа сравнения, подходящего для всех объектов.

Интерфейс IStructuralEquatable позволяет реализовать настраиваемыйсравнения для проверки на структурное равенство объектов коллекции.То есть вы можете создать собственное определение структурного равенства и указать, что это определение будет использоваться с типом коллекции, который принимает интерфейс IStructuralEquatable.

Например, если вам нужен список, который будет сортировать все егоэлементы по конкретному определению.В этом случае вы не хотите изменять реализацию своего класса, поэтому вы не хотите переопределять метод Equals.

это определит общий способ сравнения объектов в вашем приложении.

0 голосов
/ 04 марта 2012

Контракт Equals отличается от контракта IStructuralEquatable тем, что он указывает, равны ли логически 2 объекта.

По умолчанию значение Equals для ссылочного типа указывает, ссылаются ли две ссылки на один и тот же экземпляр объекта. Однако вы можете переопределить Equals в соответствии с логикой вашего приложения.

В качестве примера может иметь смысл считать равными два разных экземпляра класса Employee, если они оба представляют одну и ту же сущность в вашей системе. Для этого объекты сотрудников с соответствующими свойствами SSN будут рассматриваться как логически равные, даже если они не являются структурно равными.

...