Из раздела IEqualityComparer<T> раздела MSDN:
-
Мы рекомендуем, чтобы вы EqualityComparer <T> вместо реализация IEqualityComparer <T> интерфейса, поскольку Тесты класса EqualityComparer <T> для равенства с использованием Метод IEquatable <T> .Equals вместо метод Object.Equals....
-
Я не понимаю аргумент quote о том, почему мы предпочли бы вывести из класса
EqualityComparer<T>вместо реализацииIEqualityComparer<T>. Это означает, что объекты, реализующиеIEqualityComparer<T>, будут проверять равенство с помощьюObject.Equals, но не все ли реализованоIEqualityComparer<T>, когда мы не хотим проверять равенство с помощьюObject.EqualsилиIEquatable<T>.Equals? -
Также подразумевается, что если мы выйдем из
EqualityComparer<T>, то производный класс будет проверять равенство с помощью методаIEquatable<T>.Equals. Опять же, это не вся цель получения изEqualityComparer<T>, когда мы не хотим проверять равенство с помощьюObject.EqualsилиIEquatable<T>.Equals(посколькуEqualityComparer<T>.Defaultуже тестируется с использованиемObject.EqualsилиIEquatable<T>.Equals)?
-
-
... Это согласуется с Содержит, IndexOf, LastIndexOf и Удалите методы словаря < TKey, TValue > класс и другие общие коллекции.
-
Я предполагаю, что большинство коллекций в тесте библиотеки .NET для стандартного равенства элементов (т.е. когда пользователи не предоставляют свои собственные объекты
IEqualityComparer<T>для этих коллекций), вызываяIEquatable<T>.EqualsилиObject.Equals( в зависимости от того, реализуются ли элементы типаTIEquatable<T>) черезEqualityComparer<T>.Default. -
Почему эти коллекции (при тестировании для равенства по умолчанию) не вызываете
IEquatable<T>.EqualsилиObject.Equalsнапрямую, а не черезEqualityComparer<T>.Defaultclass?
-