Может ли GetHashCode() для одинакового двойного результата получить другое целое число?
Допустим, у нас есть double
значение в C#.
Возможно ли, что GetHashCode()
может вернуть разные целочисленные значения для этого double
на разных компьютерах /windows/ архитектурах?
public unsafe override int GetHashCode() {
double d = m_value;
if (d == 0) {
// Ensure that 0 and -0 have the same hash code
return 0;
}
long value = *(long*)(&d);
return unchecked((int)value) ^ ((int)(value >> 32));
}
1 ответ
Решение
Метод Object.GetHashCode говорит:
Реализация по умолчанию метода GetHashCode не гарантирует уникальные возвращаемые значения для разных объектов. Кроме того,.NET Framework не гарантирует реализацию по умолчанию метода GetHashCode, и возвращаемое значение будет одинаковым для разных версий.NET Framework. Следовательно, реализация по умолчанию этого метода не должна использоваться в качестве уникального идентификатора объекта для целей хеширования.