no veo razón por la que había necesidad de una. Si desea crear un código hash basado en el valor por defecto GetHashCode
por 3 artículos diferentes, a continuación, sólo tiene que utilizar:
Tuple.Create(lastName, firstName, gender).GetHashCode()
Eso se reducen hasta el equivalente de:
int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1)^(((h2 << 5) + h2)^h3));
que es bastante razonable para tal combinación de propósito general.
mismo modo:
Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
se reduciría hasta el equivalente de llamar:
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)));
Una vez más, casi tan bueno como se podría esperar.
+1: las tuplas y los tipos anónimos son excelentes para implementar GetHashCode(), Equals() y ToString() – millimoose
Buena idea al utilizar las clases 'Tuple' como acceso directo. Pero tenga en cuenta que 'Tuple.Create (...). Equals (Tuple.Create (...))' no es equivalente al método 'equals' de Guava, que sería' object.Equals (x, y) '. – LukeH
@LukeH, bueno, ya que tenemos eso, y tenemos esto también, eso significa que podemos hacerlo mejor que Guava :) –