Avatar ·

为什么在重写 Equals 时必须重写 GetHashCode?

大家好!我是一名初学 C# 的开发者,对 Equals 和 GetHashCode 方法感到困惑。 我创建了一个简单的 `Person` 类,包含 `Name` 和 `Age` 字段。我需要两个对象在这些字段相同时被视为相等。因此我重写了 `Equals` 方法: ```csharp public 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; } } ``` 当我直接比较对象时,一切正常:`person1.Equals(person2)` 对相同数据返回 `true`。但当我尝试在 `HashSet` 中使用这个类时,我注意到了奇怪的行为。即使两个 `Person` 对象包含相同的 Name 和 Age,`HashSet` 也认为它们不同,并同时添加两者。例如: ```csharp Hash