non vedo il motivo per cui avresti bisogno di uno. Se si desidera creare un hash-codice basato sul default GetHashCode
di 3 articoli diversi, poi basta usare:
Tuple.Create(lastName, firstName, gender).GetHashCode()
Questo ti riducono a l'equivalente di:
int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1)^(((h2 << 5) + h2)^h3));
che è abbastanza ragionevole per tale combinazione generica.
Allo stesso modo:
Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
si ridurrebbe all'equivalente di chiamare:
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)));
Anche in questo caso, circa buono come ci si potrebbe aspettare.
fonte
2012-01-27 16:23:09
+1: tuple e tipi anonimi sono ottimi per implementare GetHashCode(), Equals() e ToString() – millimoose
Bella idea che usa le classi 'Tuple' come scorciatoia. Ma nota che 'Tuple.Create (...). Equals (Tuple.Create (...))' non è equivalente al metodo 'equals' di Guava - sarebbe semplicemente' object.Equals (x, y) '. – LukeH
@LukeH, beh visto che ce l'abbiamo già, e anche questo ce l'abbiamo, il che significa che possiamo fare meglio di Guava :) –