Tôi không hiểu tại sao bạn cần. Nếu bạn muốn tạo một hash-code dựa trên mặc định GetHashCode
cho 3 mặt hàng khác nhau, sau đó chỉ cần sử dụng:
Tuple.Create(lastName, firstName, gender).GetHashCode()
Điều đó sẽ đun sôi xuống tương đương với:
int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1)^(((h2 << 5) + h2)^h3));
Đó là khá hợp lý cho một sự kết hợp đa năng như vậy.
Tương tự như vậy:
Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
sẽ đun sôi xuống tương đương với cách gọi:
return ((lastName == null && lastName2 == null) || (lastName != null && lastName.Equals(lastName2)))
&& ((firstName == null && firstName2 == null) || (firstName != null && firstName.Equals(lastName2)))
&& ((gender == null && gender2 == null) || (gender != null && gender.Equals(lastName2)));
Một lần nữa, khoảng tốt như bạn có thể mong đợi.
Nguồn
2012-01-27 16:23:09
+1: tuples và các loại vô danh là tuyệt vời để thực hiện GetHashCode(), Equals(), và ToString() – millimoose
Ý tưởng hay sử dụng các lớp 'Tuple' làm lối tắt. Nhưng lưu ý rằng 'Tuple.Create (...). Equals (Tuple.Create (...))' không tương đương với phương thức 'equals' của Guava - đó chỉ là' object.Equals (x, y) '. – LukeH
@ LukeH, cũng vì chúng tôi đã có điều đó, và chúng tôi có điều này quá, có nghĩa là chúng tôi có thể làm tốt hơn so với Guava :) –