我已将 Dictionary(TKey, TValue) 用于多种用途。但是我没有遇到任何实现 GetHashCode() 的场景,我认为这是因为我的键是主要类型,如 int 和 string。 我很想知道应该使用自定义对象作为键并因此实现方法 GetHashCode() Equals() 等的场景(真实世界的示例)。
而且,使用自定义对象作为键是否需要实现这些功能?
最佳答案
只要默认 Object.Equals
,您就应该覆盖 Equals
和 GetHashCode
(引用相等性测试)是不够的。例如,当您的键类型是自定义类型并且您希望两个键被视为相等时,即使它们不是自定义类型的同一实例,也会发生这种情况。
例如,如果您的 key 很简单
class Point {
public int X { get; set; }
public int Y { get; set; }
}
并且您希望两个 Point
如果它们的 X
相等并且它们的 Y
相等,那么您将需要覆盖 Equals
和 GetHashCode
。
关于c# - 我们什么时候为字典执行 GetHashCode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407380/