Дубликат: Каков наилучший алгоритм для переопределенного System.Object.GetHashCode?
Если вы написали объект с множеством членов-данных, как грамотно реализовать GetHashCode ()?
Один разработчик сказал мне, что он просто выполняет XOR (оператор ^) хеширования соответствующих полей данных, но я не уверен, что это "передовая практика".
Если бы я поступил так, то были бы функции Object.CombineHashes (Object []) и / или Object.CombineHashes (int []), которые помогли бы разумно создавать хэши сложных объектов.
Как бы вы написали эти функции?





Я сделал быструю и грязную реализацию группы членов, объединив их с конвейерами, а затем получив хэш-код этого:
(Member1.ToString() + "|" + Member2.ToString()).GetHasCode();
В моем случае я знаю, что у меня никогда не будет трубок в членах, поэтому я знал, что результаты будут довольно хорошими.
На самом деле, в моем случае я реализовал ToString для целей отладки, поэтому я просто использовал это:
this.ToString().GetHashCode();
Xors - еще один подход, который я часто видел.
Этот подход имеет серьезные последствия для производительности. Учитывая, где используется GetHashCode, это кажется эффективным, но неразумным.
Хорошая находка, @Gortok. Я проголосовал за закрытие.