Может ли 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. Следовательно, реализация по умолчанию этого метода не должна использоваться в качестве уникального идентификатора объекта для целей хеширования.

Другие вопросы по тегам