У меня есть API, где различные типы имеют пользовательские хэш-коды. Эти хэш-коды основаны на получении хеша строкового представления рассматриваемого объекта. Используются различные методы соления, так что, насколько это возможно, коды Хэша не сталкиваются и что объекты разных типов с эквивалентными строковыми представлениями имеют разные коды хэша.. Чистые коды хэшей больше не постоянны?
Очевидно, что поскольку хэш-коды основаны на строках, существуют некоторые столкновения (бесконечные строки и ограниченный диапазон 32-битных целых чисел). Я использую хеши на основе строковых представлений, так как мне нужно, чтобы хэши сохранялись в течение сеансов и, в частности, для использования в хранилище баз данных объектов.
Внезапно сегодня мой код начал генерировать разные хэш-коды для объектов, которые разрушают всевозможные вещи. Он работал ранее сегодня, и я не использовал код какого-либо кода, связанного с генерированием кода хэш-кода.
Я знаю, что документация .Net позволяет реализовать хэш-коды между версиями каркаса .Net для изменения (и между 32 и 64-разрядными версиями), но я не изменил версию фреймворка и не было никакой инфраструктуры Обновления в последнее время, насколько я помню
Любые идеи, потому что это кажется действительно странным?
Редактировать
Хэш-коды генерируются, как следует:
//Compute Hash Code
this._hashcode =
(this._nodetype + this.ToString() + PlainLiteralHashCodeSalt).GetHashCode();
как кажется немного легким только как комментарий: объект переместился в другое пространство имен, и вы берете полное имя объекта для своего хэша. Тогда вам не придется прикасаться к коду, а только перемещать объект. – StampedeXV
строковое представление не основано на имени типа, а на строчном представлении значения объекта – RobV
также я проверил SVN, и все файлы для типов, у которых есть пользовательские хеш-коды, ** ** ** вообще не изменены – RobV