Это старый вопрос, но я бы хотел добавить, упомянув эту ошибку Microsoft о качестве хеша .
Сводка: На 64b, качество хэша очень низкое, когда ваша строка содержит байты '\ 0' . По сути, будет хэшироваться только начало строки.
Если вы, как и я, должны использовать строки .Net для представления двоичных данных в качестве ключа для высокопроизводительных словарей, вы должны знать об этой ошибке.
Жаль, это WONTFIX ... Как замечание, я не понимаю, как они могли бы сказать, что изменение хеш-кода является критическим изменением, когда код включает
// We want to ensure we can change our hash function daily.
// This is perfectly fine as long as you don't persist the
// value from GetHashCode to disk or count on String A
// hashing before string B. Those are bugs in your code.
hash1 ^= ThisAssembly.DailyBuildNumber;
и хеш-код уже в x86 / 64b уже другой.