Comment générer un code de hachage unique pour un objet, basé sur son contenu?

J'ai besoin de générer un unique code de hachage pour un objet, en fonction de son contenu, par exemple de type DateTime(2011,06,04) devrait être égal à DateTime(2011,06,04).

  • Je ne peux pas utiliser .GetHashCode() car elle est susceptible de générer le même code de hachage pour les objets avec des contenus différents.
  • Je ne peux pas utiliser .GetID de ObjectIDGenerator car il génère un autre code de hachage pour les objets avec le même contenu.
  • Si l'objet contient d'autres sous-objets, il doit vérifier de manière récursive.
  • Il faut travailler sur les collections.

La raison que j'ai besoin d'écrire cela? Je suis en train d'écrire une couche de mise en cache à l'aide de PostSharp.

Mise à jour

Je crois que j'ai posé la mauvaise question. Comme Jon Skeet a souligné, pour être sur le côté sûr, j'ai besoin d'autant de combinaisons uniques dans la clé de cache comme il y a des combinaisons de données dans l'objet. Donc, la meilleure solution pourrait être de construire une longue chaîne qui code pour le public propriétés de l'objet, à l'aide de la réflexion. Les objets ne sont pas trop gros donc c'est très rapide et efficace:

  • Efficace pour construire la clé de cache (il suffit de convertir le public propriétés de l'objet en une chaîne de caractères).
  • Son efficacité à vérifier pour un accès au cache (comparer deux chaînes de caractères).

source d'informationauteur Contango