La création de la méthode GetHashCode en C#

Quelle est la meilleure façon de créer votre propre méthode GetHashCode pour une classe en C#? Supposons que j'ai une classe simple (qui remplace la méthode Equals), comme suit:

class Test
{
   public string[] names;

   public double[] values;

   public override bool Equals(object obj)
   {
      return (obj is Test) && this.Equals((Test)obj);
   }

   public bool Equals(Test t)
   {
      return names.Equals(t.names) && values.Equals(t.values);
   }
}

Dois-je utiliser le code par défaut pour la méthode GetHashCode?

public override int GetHashCode()
{
   return base.GetHashCode();
}

Dois-je de la base de la méthode sur le contenu de ma classe?

public override int GetHashCode()
{
   return names.GetHashCode() + values.GetHashCode() ;
}

Ou dois-je faire autre chose?

Vous n'êtes pas primordial est égal correctement ici.
En fait, je pense qu'il va conduire à stackoverflow.
Non, ça n'a pas de débordement de la pile. Cependant, elle ne fonctionne pas, soit.
Il a déjà conduit à stackoverflow.
Boom Boom tish.

OriginalL'auteur Richie Cotton | 2009-07-22