Sto cercando di capire il ruolo del metodo GetHashCode dell'interfaccia IEqualityComparer.Qual è il ruolo di GetHashCode in IEqualityComparer <T> in .NET?
L'esempio che segue è tratto da 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();
}
}
non caso in cui il metodo di implementazione Equals essere sufficiente per confrontare due oggetti di sicurezza? È lì che diciamo al framework la regola usata per confrontare gli oggetti. Perché è necessario il codice GetHash?
Grazie.
Lucian
Prendere una lettura: http://en.wikipedia.org/wiki/Hash_table quindi vedere se è meglio comprendere lo scopo di GetHashCode. – spender
Vedere questa grande risposta: http://stackoverflow.com/a/3719802/136967 – Mikhail