Nie rozumiem, dlaczego go potrzebujesz. Jeśli chcesz utworzyć skrótu kodu na podstawie domyślnego GetHashCode
dla 3 różnych przedmiotów, a potem po prostu użyć:
Tuple.Create(lastName, firstName, gender).GetHashCode()
To będzie sprowadzają się do równowartości:
int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1)^(((h2 << 5) + h2)^h3));
co jest dość rozsądne dla takiego połączenia ogólnego przeznaczenia.
Podobnie:
Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
Czy sprowadzają się do równowartości numerem:
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)));
Ponownie, tak dobre, jak można się było spodziewać.
+1: krotki i typy anonimowe doskonale nadają się do implementacji GetHashCode(), Equals() i ToString() – millimoose
Przyjemny pomysł z użyciem klas 'Tuple' jako skrótu. Zauważ, że 'Tuple.Create (...). Equals (Tuple.Create (...))' nie jest równoznaczne z metodą "równa się" Guavy - to byłby po prostu 'object.Equals (x, y) '. – LukeH
@LukeH, odkąd już to mamy, i mamy to również, to znaczy, że możemy zrobić lepiej niż Guava :) –