为什么在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`,但不明白为什么。毕竟我的比较逻辑已经正常工作了。
你能用一个简单的例子解释一下,什么情况下会出问题吗?