HashSet<T>
по умолчанию не имеет семантики равенства значений.Он имеет семантику ссылочного равенства, поэтому два различных хеш-набора не будут равны или не будут иметь одинаковый хеш-код, даже если содержащиеся элементы одинаковы.
Вам нужно использовать специальную цель IEqualityComparer<HashSet<int>>
, чтобы получитьповедение, которое вы хотите.Вы можете свернуть свой собственный или использовать тот, который по умолчанию предоставляет вам фреймворк:
var hashSetOfIntComparer = HashSet<int>.CreateSetComparer();
//will evaluate to true
var haveSameHash = hashSetOfIntComparer.GetHashCode(set1) ==
hashSetOfIntComparer.GetHashCode(set2);
Итак, если коротко, коротко:
Как я могу получить результат?необходимость? «Равные наборы дают одинаковый хэш-код»
Вы не можете этого сделать, если планируете использовать реализацию по умолчанию HashSet<T>.GetHashCode()
.Вы либо используете специальный компаратор, либо расширяете HashSet<T>
и переопределяете Equals
и GetHashCode
в соответствии со своими потребностями.