Nếu có một liệt kê được lưu trữ bên trong một loại tổng hợp, người ta có thể muốn bao gồm điều đó bên trong mã băm của loại (giả sử một hàm băm "multiply by primes" điển hình). Nếu một cuộc gọi chỉ gọi SomeEnum.GetHashCode()
, có vẻ như các hộp JIT thể hiện, ngay cả trong bản phát hành bản phát hành.Làm cách nào để truy xuất mã băm của một liệt kê mà không có quyền anh?
Việc lập hồ sơ này cho thấy khoảng 10% thời gian đơn đăng ký của tôi đã dành số liệt kê quyền anh trong các hàm GetHashCode
khác nhau.
Một số loại giá trị triển khai IEquatable
hoặc các giao diện tương tự, cho phép gọi GetHashCode
làm phương pháp tĩnh; mà tránh đấm bốc. Nhưng System.Enum
không cung cấp quá tải tĩnh của GetHashCode
. Có một số phương tiện tính toán mã mà nên được sử dụng nhưng tránh được quyền anh?
Tại sao phải bận tâm? Enum là mã băm riêng của nó. Chỉ cần cast vào int và gọi nó là một ngày. –
@Raymond: Tôi nghĩ rằng có thể dẫn đến sự phân phối không tốt; nhưng suy nghĩ lại về nó một lần nữa tôi sẽ xem nó có hoạt động không. –
@Raymond: Điều đó thực sự hiệu quả đối với trường hợp thử nghiệm cụ thể này. Tôi đang để mở này mặc dù trong một thời gian ... –