Avatar ·

Por que é necessário sobrescrever GetHashCode ao sobrescrever Equals em C#?

Olá a todos! Comecei a estudar C# e me deparei com uma situação confusa. Tenho uma classe simples `Person` com os fields `Name` e `Age`. Quero que dois objetos sejam considerados iguais se esses fields coincidirem. Por isso, sobrescrevi o método `Equals` na minha classe. Aqui está um exemplo 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; } } ``` Tudo funciona perfeitamente ao comparar com `Equals`. Mas notei que o Visual Studio emite um aviso: `'Person' overrides Object.Equals(object) but does not override Object.GetHashCode()`. Li que é necessário sobrescrever `GetHashCode`, mas não entendo por quê. Afinal, minha lógica de comparação funciona assim mesmo. Vocês podem explicar com um exemplo simples o que pode quebrar?