Я считаю, что классы IDictionary лучше работают с сортируемыми объектами. Я также считаю, что интерфейс IComparer необходим для сортировки объектов из класса. Я также прочитал в MSDN, что когда вы реализуете IComparable, вам нужно будет переопределить метод Equals (и GetHashCode по расширению, как я полагаю).
У меня есть три сомнения:
1) Любое из вышеперечисленных предположений неверно?
2) Когда я буду внедрять IComparer, мне придется следовать тем же рекомендациям IComparable?
3) Когда я переопределяю метод Equals, мне придется переопределить оператор ==, или верно только обратное?





(Я исключил из этого универсальные шаблоны - те же принципы действуют для общих и неуниверсальных форм. Неуниверсального интерфейса IEquatable нет, поскольку в System.Object уже есть соответствующие методы.)
Чтобы объекты можно было использовать в качестве ключей IDictionary, необязательно их сортировать. Однако они должны иметь разумный хэш-код и реализацию равенства.
Если вы не используете словарь, который на самом деле сортирует ключи, вас должны больше интересовать IEqualityComparer<T> и IEquatable<T> - вам не нужно иметь возможность сказать, что один объект больше или меньше другого, независимо от того, являются они или нет равно и каков хэш-код одного объекта (в соответствии с Equals).
Реализация IEquatable аналогична реализации IComparable - это означает, что объект может сравнивать сам с другим объектом указанного типа (обычно того же типа). Хотя вы не можете использовать имеют для переопределения Equals (object) для реализации IEquatable, это настоятельно рекомендуется.
Реализация IEqualityComparer похожа на реализацию IComparer - вместо сравнения «этого» объекта с другим, метод Equals / Compare принимает значения два для сравнения. Реализации IEqualityComparer / IComparer редко переопределяют object.GetHashCode или object.Equals, если только они не хотят позволить сравнения компараторов - редко полезно.
Для вашего третьего момента: переопределение Equals, конечно, не заставляет вас перегрузить == (вы не можете переопределять операторы, только перегрузите их). Вы можете выбрать, хотите ли вы это сделать.