Estoy tratando de entender para qué se usa object.GetHashCode()
. Leí que las colecciones lo usan para identificar claves de manera única. Pero quería probar esto y el resultado no es el esperado.¿Por qué importar GetHashCode()?
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]);
lo que habría esperado "gato" sobreescribiría "perro" o algún tipo de error que me dice que la "clave ya existe", pero la salida es
"gato" "perro"
btw - no está relacionado con la pregunta, pero 'struct' es una opción muy pobre para este escenario. Si tiene dudas, use 'clase'. Si no está en duda, probablemente todavía use 'clase'. Es * extremadamente * raro para (válidamente) declarar una 'estructura' en C#. –
Sí, estoy de acuerdo, en realidad la prueba fue originalmente con clase, pero traté de reemplazar a struct para ver si hacía diferencia :) –