2013-02-03 2 views
0

Je sais ce n'est pas très intelligent d'utiliser HashCode comme identifiant unique,GetHashCode conflits

, mais disons que j'ai deux variables sur la même HashCode est la seule façon dont je peux les obtenir,

comment puis-je faire la différence?

+0

Pouvez-vous poster le code? Je ne suis pas sûr que le sens de "sur le même HashCode est la seule façon de les obtenir". –

+0

Je n'ai pas de code, c'est une question générale. –

Répondre

1

Vous devriez être en mesure de déterminer si les références sont égaux. Essayez la fonction ReferenceEquals pour vérifier si vous avez une référence au même objet.

+0

Mais 'Equals' est utilisé pour tester si les deux objets sont" similaires ". Cela pourrait être vrai même s'il y a deux objets. Par exemple avec 'string x =" abc "; chaîne y = "a"; y + = "bc"; ', après l'exécution du code,' x' et 'y' ont le même code de hachage. 'Equals' renvoie' true' car 'x' et' y' ont la même valeur de chaîne. Mais 'ReferenceEquals' renvoie' false' car 'x' et' y' renvoient deux objets, pas le même (sans importance que les deux objets soient identiques). –

+0

@JeppeStigNielsen vous avez raison. Cependant, je crois que le demandeur essayait de déterminer s'il avait une référence au même objet, pas si les valeurs des variables étaient égales. – Mash

+1

Si elle (@HodayaShalom) n'est vraiment intéressée que par l'égalité des objets, au lieu d'utiliser 'x.GetHashCode()' elle pourrait dire 'RuntimeHelpers.GetHashCode (x)'. Cela donnera (avec une probabilité très élevée) un code unique même si 'x' et' y' sont deux instances d'objet qui sont 'égales' par rapport à. 'Equals'. La méthode d'instance surchargée 'GetHashCode()' (aucun paramètre) d'un autre côté doit donner un hachage commun pour 'x' et' y'. –

1

C'est assez couvert dans la documentation. En supposant que vous avez seul le code de hachage:

L'implémentation par défaut de la méthode GetHashCode ne prend pas en garantie des valeurs de retour unique pour différents objets. En outre, le .NET Framework ne garantit pas l'implémentation par défaut de la méthode GetHashCode , et la valeur renvoyée sera la même entre les différentes versions du .NET Framework. Par conséquent, l'implémentation par défaut de cette méthode ne doit pas être utilisée en tant qu'objet unique pour les besoins du hachage.

De http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

+0

Je l'ai lu, mais disons qu'une telle chose s'est produite et je ne peux pas le changer, il n'y a aucun moyen de connaître les différences entre les deux variables? –

+1

En supposant que vous avez vieux le code de hachage, non. Vous pouvez vérifier si les références d'objets sont égales, mais votre question semble impliquer que tout ce que vous savez est le code de hachage. –