Yêu cầu tối thiểu là mã băm phải giống nhau cho bất kỳ giá trị cụ thể nào. Vì vậy, thực hiện các công trình này, nhưng sự phân bố là khủng khiếp:
public override int GetHashCode() {
return 1;
}
Để làm việc tốt nhất, các mã băm nên xem xét tất cả các dữ liệu có liên quan trong đối tượng và được phân phối đồng đều nhất có thể trong phạm vi số nguyên.
Triển khai thực hiện xem xét tất cả thành viên, nhưng không phân phối rất tốt có thể được tìm thấy trong cấu trúc System.Drawing.Point. Nó sử dụng XOR để kết hợp các bit trong các thành viên, có nghĩa là tất cả các điểm trong đó X và Y đều bình đẳng lấy mã băm zero:
public override int GetHashCode() {
return this.X^this.Y;
}
Một cách để có được một bản phân phối tốt hơn là để nhân một thành viên của một số nguyên tố số và thêm thành viên tiếp theo, lặp lại khi cần:
public override int GetHashCode() {
return ((this.Value1 * 251) + this.Value2) * 251 + this.Value3;
}
Phương pháp tương tự đã được sử dụng trong các trình tạo ngẫu nhiên đơn giản vì nó phân tán các giá trị khá tốt.
Một số điểm thực sự tốt ở đó. Cảm ơn! – dotnetdev