Не понимаю, зачем тебе это нужно. Если вы хотите создать хеш-код на основе значения по умолчанию GetHashCode
для 3 различных элементов, просто используйте:
Tuple.Create(lastName, firstName, gender).GetHashCode()
Это будет сводиться к эквиваленту:
int h1 = lastName.GetHashCode();
int h2 = firstName.GetHashCode();
int h3 = gender.GetHashCode();
return (((h1 << 5) + h1) ^ (((h2 << 5) + h2) ^ h3));
Что вполне разумно для такой универсальной комбинации.
Аналогично:
Tuple.Create(lastName, firstName, gender).Equals(Tuple.Create(lastName2, firstName2, gender2))
Будет сводиться к эквиваленту вызова:
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)));
Опять, примерно так хорошо, как вы могли ожидать.