Próbuję zrozumieć, do czego służy object.GetHashCode()
. Czytałem, że jest używane przez kolekcje do jednoznacznej identyfikacji kluczy. Ale chciałem to sprawdzić i wynik nie jest tym, czego się spodziewałem.Dlaczego funkcja GetHashCode() ma znaczenie?
struct Animal
{
public string Name { get; set; }
public int Age { get; set; }
public Animal(string name, int age) : this()
{
Name = name;
Age = age;
}
public override int GetHashCode()
{
return Age.GetHashCode();
}
}
object doggy = new Animal("Dog", 25);
object cat = new Animal("Cat", 25);
Hashtable table = new Hashtable();
table.Add(doggy, "Dog");
table.Add(cat, "Cat");
Console.WriteLine("{0}", table[cat]);
Console.WriteLine("{0}", table[doggy]);
Liczyłam „Cat” by nadpisać „Dog” lub jakiś rodzaj błędu informujący mnie, że „klucz już istnieje”, ale wyjście jest
„Cat” „Dog”
btw - nie jest to związane z pytaniem, ale 'struct' jest bardzo złym wyborem dla tego scenariusza. W razie wątpliwości użyj 'class'. Jeśli nie masz wątpliwości, prawdopodobnie nadal używasz 'class'. Niezwykle rzadko można (zgodnie z prawem) zadeklarować 'struct' w języku C#. –
Tak, zgadzam się, faktycznie test był pierwotnie z klasą, ale próbowałem zastąpić do struct, aby zobaczyć, czy to się stało różnicy :) –