После выполнения этого фрагмента кода:
int a = 50;
float b = 50.0f;
Console.WriteLine(a.GetHashCode() == b.GetHashCode());
Получаем False
, что ожидаемо, так как мы имеем дело с разными объектами, следовательно должны получиться разные хеши.
Однако, если мы выполним это:
int a = 0;
float b = 0.0f;
Console.WriteLine(a.GetHashCode() == b.GetHashCode());
Получаем True
. Оба объекта возвращают один и тот же хеш-код: 0
.
Почему это происходит? Разве они не должны возвращать разные хэши?
a.Equals(b)
, то получимFalse
, даже если их хэши совпадают - person Matias Cicero   schedule 28.10.2014