Один, если способы реализации GetHashCode - там, где это требуется для этого - описывается Jon Skeet здесь. Повторяя его код:
public override int GetHashCode()
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = 17;
        // Suitable nullity checks etc, of course :)
        hash = hash * 23 + field1.GetHashCode();
        hash = hash * 23 + field2.GetHashCode();
        hash = hash * 23 + field3.GetHashCode();
        return hash;
    }
}
Прокрутка этого кода вручную может быть подвержена ошибкам, а ошибки могут быть тонкими/трудно различимыми (вы поменяли местами + и * по ошибке?), может быть сложно запомнить правила комбинации для разных типов, и мне не нравится тратить умственные усилия на то, чтобы писать и анализировать одно и то же снова и снова для разных полей и классов. Он также может запутать одну из самых важных деталей (я помню, чтобы включать все поля?) В повторяющиеся шумы.
Есть ли сжатый способ комбинировать полевые хэш-коды с использованием библиотеки .net?. Очевидно, я мог бы написать свой собственный, но если есть что-то идиоматическое/встроенное, я бы предпочел это.
В качестве примера, в Java (с использованием JDK7) я могу достичь вышеуказанного, используя:
   @Override
   public int hashCode()  
   {  
      return Objects.hash(field1, field2, field3);  
   }  
Это действительно помогает устранить ошибки и сосредоточиться на важных деталях.
Мотивация: я столкнулся с классом С#, который требует переопределенного GetHashCode(), но способ объединения хэш-кодов его различных составляющих имел некоторые серьезные ошибки. Функция библиотеки для объединения хэш-кодов была бы полезна для предотвращения таких ошибок.