Я подозреваю, что причина, по которой ваши хеш-коды меняются, состоит в том, что вы не переопределили GetHashCode () в своем классе, который объединяет ваши три поля, поэтому он использует реализацию по умолчанию, которая возвращает хеш-код, специфичный для конкретного объекта (а не его значений)).Однако я бы порекомендовал вообще не использовать GetHashCode
для вашей проблемы, поскольку эти значения необходимы для сохранения на диске и будут полезны между вызовами вашего приложения.
GetHashCode()
возвращает хеш, на который вы можете положитьсятолько в контексте одного экземпляра процесса (один запуск).Реализации GetHashCode
могут возвращать значения, основанные на упорядочении памяти элементов, которые могут изменяться между запусками процесса, и, кроме того, сгенерированные значения могут различаться в зависимости от архитектуры процесса или между версиями .NET.См. документацию GetHashCode для получения более подробной информации.
Если вы хотите что-то, на что вы можете положиться при сохранении на диск и перезагрузке, вам следует переключиться на хеш-функцию с поведением, которое хорошо определено (или, альтернативно, что вы можете контролировать).Список таких алгоритмов можно найти на странице списка хеш-функций *1011* на странице Википедии.В частности, некриптографические подходят для этой задачи.(Хотя нет никакой причины, кроме производительности, почему вы не можете использовать криптографическую.)