Прочитав все вопросы и ответы по StackOverflow относительно переопределения GetHashCode(), я написал следующий метод расширения для легкого и удобного переопределения GetHashCode():
public static class ObjectExtensions
{
    private const int _seedPrimeNumber = 691;
    private const int _fieldPrimeNumber = 397;
    public static int GetHashCodeFromFields(this object obj, params object[] fields) {
        unchecked { //unchecked to prevent throwing overflow exception
            int hashCode = _seedPrimeNumber;
            for (int i = 0; i < fields.Length; i++)
                if (fields[i] != null)
                    hashCode *= _fieldPrimeNumber + fields[i].GetHashCode();
            return hashCode;
        }
    }
}
(Я в основном рефакторизую код, который кто-то разместил там, потому что мне очень нравится, что его можно использовать вообще)
который я использую следующим образом:
    public override int GetHashCode() {
        return this.GetHashCodeFromFields(field1, field2, field3);
    }
Вы видите какие-либо проблемы с этим кодом?
