Cela dépend.
Il y a beaucoup de cas où l'utilisation GetHashCode() pourrait causer un comportement incorrect:
Un code de hachage est destiné à l'insertion efficace et recherche dans les collections qui sont basées sur une table de hachage. Un code de hachage n'est pas une valeur permanente. Pour cette raison:
- Ne pas sérialiser les valeurs de code de hachage ou les stocker dans des bases de données.
- N'utilisez pas le code de hachage comme clé pour extraire un objet d'une collection avec clé.
- N'envoyez pas de codes de hachage à travers les domaines d'application ou les processus. Dans certains cas, les codes de hachage peuvent être calculés par processus ou par domaine d'application.
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
Si le cache de mémoire se produit (ou peut se produire à l'avenir) dans un processus différent ou application domaine que le code qui l'appelle, vous ne parvenez pas à la 3ème condition. Il semble étrange d'utiliser un seul caractère UTF32 comme clé pour un cache potentiellement volumineux.
Si vous mettez en cache suffisamment de choses, le taux de collision sur un hachage 32 bits peut être désagréablement élevé en raison de Birthday Problem. Lors de la mise en cache de dizaines de millions de choses, j'ai utilisé un hachage 64 bits appelé City Hash (créé par Google, open source) avec succès. Vous pouvez également utiliser un guid, bien que la mémoire pour maintenir les clés est deux fois plus grande pour un GUID par rapport à un hachage 64 bits.
Je reçois une erreur La valeur UTF32 doit être comprise entre 0x000000 et 0x10ffff donc je suppose que je ne peux pas simplement convertir un Int32 en un caractère de cette façon. – Alain
Toutes les valeurs 32 bits ne représentent pas un point de code UTF32 valide. Simple, pas le plus rapide mais décemment efficace serait d'utiliser la représentation hexadécimale du code de hachage. De mémoire, 'myObject.GetHashCode(). ToString (" X ")'. –
Merci à tous, commentaires très utiles – Alain