Хеш-код не должен быть уникальным. Поскольку хеш-код всего 32 бита, даже получить уникальный код невозможно, если данные больше 32-х бит.
Единственное требование - чтобы хеш-код всегда был одинаковым для любого конкретного набора соответствующих данных в классе. Это означает, что работает даже постоянный хеш-код:
public int GetHashCode() {
return 1;
}
Это не очень хорошо, так как дистрибутив ужасен, но все же работает.
Вы можете начать с очень простой реализации хеш-кода, например:
public int GetHashCode() {
return
keypart1 ^ keypart2 ^ keypart3 ^ keypart4 ^
keypart5 ^ keypart6 ^ keypart7 ^ value.GetHashCode();
}
Для чего-то более сложного вы можете умножить на простое число:
public int GetHashCode() {
return
((((((keypart1 * 13 + keypart2) * 13 + keypart3) * 13 + keypart4) * 13 +
keypart5) * 13 + keypart6) * 13 + keypart7) * 13 + value.GetHashCode();
}