Avatar ·

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

大家好!我开始学习C#,遇到了一个令人困惑的情况。我有一个简单的类`Person`,包含字段`Name`和`Age`。我希望当两个对象的这些字段相同时,它们被视为相等。因此,我在类中重写了`Equals`方法。 以下是代码示例: ```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; } } ``` 通过`Equals`进行比较时一切正常。但我注意到Visual Studio发出警告:`'Person' overrides Object.Equals(object) but does not override Object.GetHashCode()`。我读到需要重写`GetHashCode`,但不明白为什么。毕竟我的比较逻辑已经正常工作了。 你能用一个简单的例子解释一下,什么情况下会出问题吗?