EqualityComparer <String>со стабильным HashCode и возможностью игнорировать диакритические знаки? - PullRequest
0 голосов
/ 27 февраля 2019

Я ищу IEqualityComparer<String>, который поддерживает стабильный HashCode , то есть тот же HashCode между выполнениями / процессами.Мне также нужно, чтобы игнорировать регистр и непространственные символы объединения (такие как диакритические знаки).

Есть ли "простые" способы сделать это в .NET ?Я начал свою собственную реализацию со стабильного HashCode, который игнорирует регистр, но я начинаю желать, чтобы я мог как-то использовать уже существующие реализации в .NET .

Встроенный компаратор строк добавляет некоторые случайные начальные числа в HashCodes между процессами, чтобы не сделать его стабильным (я думаю, потому что они не могут гарантировать, что он останется стабильным между .NET средами выполнения?), Но ядумаю, я справлюсь с этим, просто убедившись, что сохраняемые мной HashCodes будут стерты / перестроены при переходе на другую среду выполнения .

В любом случае, есть ли способ получить доступ к вычислению внутренней контрольной суммы (без случайности)?Может быть, с отражением?


Обновление: я не эксперт по почему, но очевидно, что HashCode рассчитывается по-разному в зависимости от времени выполнения.Я нуждаюсь в этом, потому что у меня есть индекс поиска на основе диска, который использует хеш-код для строк в качестве ключей, и, поскольку он является постоянным, мне, очевидно, нужно, чтобы они были одинаковыми во время выполнения.Конечно, я мог бы рассчитывать свои собственные контрольные суммы любым способом, который мне нравится, но так как .NET уже хорошо справляется с этим, я бы хотел воспользоваться этим.Но без «семени» или того, что вы хотите назвать, вещь, которая отличает хэш-коды в зависимости от времени выполнения.

...