J'essaie de comprendre le rôle de la méthode GetHashCode de l'interface IEqualityComparer.Quel est le rôle de GetHashCode dans IEqualityComparer <T> dans .NET?
L'exemple suivant est tiré de MSDN:
using System;
using System.Collections.Generic;
class Example {
static void Main() {
try {
BoxEqualityComparer boxEqC = new BoxEqualityComparer();
Dictionary<Box, String> boxes = new Dictionary<Box,
string>(boxEqC);
Box redBox = new Box(4, 3, 4);
Box blueBox = new Box(4, 3, 4);
boxes.Add(redBox, "red");
boxes.Add(blueBox, "blue");
Console.WriteLine(redBox.GetHashCode());
Console.WriteLine(blueBox.GetHashCode());
}
catch (ArgumentException argEx) {
Console.WriteLine(argEx.Message);
}
}
}
public class Box {
public Box(int h, int l, int w) {
this.Height = h;
this.Length = l;
this.Width = w;
}
public int Height { get; set; }
public int Length { get; set; }
public int Width { get; set; }
}
class BoxEqualityComparer : IEqualityComparer<Box> {
public bool Equals(Box b1, Box b2) {
if (b1.Height == b2.Height & b1.Length == b2.Length
& b1.Width == b2.Width) {
return true;
}
else {
return false;
}
}
public int GetHashCode(Box bx) {
int hCode = bx.Height^bx.Length^bx.Width;
return hCode.GetHashCode();
}
}
devrait-il pas Equals implémentation de la méthode suffisante pour comparer deux objets Box? C'est là que nous disons au framework la règle utilisée pour comparer les objets. Pourquoi le GetHashCode est-il nécessaire?
Merci.
Lucian
Lisez ce qui suit: http://en.wikipedia.org/wiki/Hash_table pour voir si vous comprenez mieux le but de GetHashCode. – spender
Voir cette bonne réponse: http://stackoverflow.com/a/3719802/136967 – Mikhail