¿Por qué es necesario redefinir GetHashCode al redefinir Equals en C#?
¡Hola a todos! Empecé a estudiar C# y me encontré con una situación que no entiendo. Tengo una clase simple `Person` con campos `Name` y `Age`. Quiero que dos objetos se consideren iguales si tienen estos campos iguales. Por eso redefiní el método `Equals` en mi clase.
Aquí hay un ejemplo de código:
```csharp
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person other = (Person)obj;
return Name == other.Name && Age == other.Age;
}
}
```
Todo funciona perfectamente al comparar con `Equals`. Pero noté que Visual Studio muestra una advertencia: `'Person' overrides Object.Equals(object) but does not override Object.GetHashCode()`. Leí que es necesario redefinir `GetHashCode`, pero no entiendo por qué. Después de todo, mi lógica de comparación funciona así.
¿Pueden explicar con un ejemplo simple qué podría romperse?