Из раздела 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
( в зависимости от того, реализуются ли элементы типаT
IEquatable<T>
) черезEqualityComparer<T>.Default
. -
Почему эти коллекции (при тестировании для равенства по умолчанию) не вызываете
IEquatable<T>.Equals
илиObject.Equals
напрямую, а не черезEqualityComparer<T>.Default
class?
-