Ответ 1
Это означает, что он будет использовать компаратор, возвращенный EqualityComparer<T>.Default
для типа элемента T
для набора.
Как указано в документации:
Свойство Default проверяет, реализует ли тип T System.IEquatable и, если это так, возвращает EqualityComparer, который использует эту реализацию. В противном случае возвращает EqualityComparer, который использует переопределения Object.Equals и Object.GetHashCode, предоставленные T.
Итак, для вашего пользовательского типа он будет использовать метод GetHashCode
, который вы определили, чтобы найти элементы в наборе. Если вы внедрили IEquatable<T>
, он будет использовать IEquatable<T>.Equals(T)
для равенства, иначе он будет использовать ваш метод Equals(object)
. Этот метод по умолчанию использует ссылочное равенство, как определено в классе object
. Поэтому, если вы определяете равенство с помощью любого из методов, вы также должны будете также переопределить GetHashCode
.