Einfache Möglichkeit, Feld-Hashcodes zu kombinieren?

Eine Möglichkeit zur Implementierung von GetHashCode - wo dies erforderlich ist - wird von Jon Skeet beschriebenHier. Seinen Code wiederholen:

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;
    }
}

Das Rollen dieses Codes von Hand kann fehleranfällig sein und Fehler können subtil / schwer zu erkennen sein (haben Sie getauscht)+ und* fälschlicherweise?) kann es schwierig sein, sich die Kombinationsregeln für verschiedene Typen zu merken, und ich mag es nicht, geistige Anstrengungen zu unternehmen, um dasselbe für verschiedene Bereiche und Klassen immer wieder zu schreiben / zu wiederholen. Es kann auch eines der wichtigsten Details (habe ich daran gedacht, alle Felder einzuschließen?) In sich wiederholendem Rauschen verschleiern.

Gibt es eine übersichtliche Möglichkeit, Feld-Hashcodes mithilfe der .net-Bibliothek zu kombinieren?. Natürlich könnte ich mein eigenes schreiben, aber wenn es etwas Idiomatisches / Eingebautes gibt, würde ich das vorziehen.

In Java (mit JDK7) kann ich beispielsweise Folgendes erreichen:

   @Override
   public int hashCode()  
   {  
      return Objects.hash(field1, field2, field3);  
   }  

Dies hilft wirklich, Fehler zu beseitigen und sich auf die wichtigen Details zu konzentrieren.

Motivation: Ich bin auf eine C # -Klasse gestoßen, die eine Überschreibung erfordertGetHashCode(), aber die Art und Weise, wie die Hashcodes der verschiedenen Bestandteile kombiniert wurden, hatte einige schwerwiegende Fehler. Eine Bibliotheksfunktion zum Kombinieren der Hashcodes wäre nützlich, um solche Fehler zu vermeiden.