Để trích dẫn từ Guidelines and rules for GetHashCode bởi Eric Lippert:Làm cách nào để tạo một HashCode trong .net (C#) cho một chuỗi an toàn để lưu trữ trong cơ sở dữ liệu?
Rule: tiêu dùng của GetHashCode không thể dựa vào nó là ổn định theo thời gian hoặc trên AppDomains
Giả sử bạn có một đối tượng khách hàng mà có một loạt các các trường như Tên, Địa chỉ, v.v. Nếu bạn tạo hai đối tượng chính xác với cùng một dữ liệu trong hai quy trình khác nhau, chúng không phải trả lại cùng mã băm . Nếu bạn tạo một đối tượng như vậy trên Thứ Ba trong một quy trình, hãy tắt nó, và chạy lại chương trình vào Thứ Tư, mã băm có thể là khác nhau.
Điều này đã cắn người trong quá khứ. Tài liệu cho các ghi chú Hệ thống.String.GetHashCode cụ thể là hai chuỗi giống nhau có thể có các mã băm khác nhau trong các phiên bản khác nhau của CLR và trên thực tế chúng thực hiện. Không lưu trữ chuỗi băm trong cơ sở dữ liệu và mong đợi chúng giống nhau mãi mãi, bởi vì chúng sẽ không tồn tại.
Vì vậy, cách chính xác để tạo HashCode của chuỗi mà tôi có thể lưu trữ trong cơ sở dữ liệu là gì?
(Xin vui lòng cho tôi biết tôi không phải là người đầu tiên đã để lại lỗi này trong phần mềm tôi đã viết!)
Vâng, tôi không bao giờ dựa vào GetHashCode, bởi vì tôi biết, làm thế nào cẩu thả tôi thực hiện phương pháp này. Tôi tin rằng những người khác không làm điều đó tốt hơn ... ;-) –
Bạn không phải là người đầu tiên đã để lại lỗi này trong phần mềm mà bạn đã viết. – Bobby
Động cơ Dbase đã rất tốt ở các chuỗi băm. Chỉ cần tạo chỉ mục cho cột. –