gpt4 book ai didi

c# - 如何在覆盖 GetHashCode() 的类型上使用 Object.GetHashCode()

转载 作者:太空狗 更新时间:2023-10-30 00:58:51 25 4
gpt4 key购买 nike

我有一个实现 IEquatable<> 的类 A,使用它的字段(比如 A.b 和 A.c)来实现/覆盖 Equals() 并覆盖 GetHashCode(),并且一切正常,99% 的时间。 A 类是继承自接口(interface) D 的层次结构(B 类、C 类)的一部分;它们都可以一起存储在字典 Dictionary 中,因此当它们都带有自己的默认 Equals()/GetHashCode() 时很方便。

然而,在构建 A 时,我有时需要做一些工作来获取 A.b 和 A.c 的值;当发生这种情况时,我想存储对正在构建的实例的引用。在那种情况下,我不想使用 A 提供的默认 Equals()/GetHashCode() 覆盖。因此,我正在考虑实现 ReferenceEqualityComparer,这意味着强制使用对象的 Equals()/GetHashCode() :

    private class ReferenceEqualityComparer<T> : IEqualityComparer<T>
{
#region IEqualityComparer<T> Members
public bool Equals(T x, T y)
{
return System.Object.ReferenceEquals(x, y);
}

public int GetHashCode(T obj)
{
// what goes here? I want to do something like System.Object.GetHashCode(obj);
}
#endregion
}

问题是,由于 A 覆盖了 Object.GetHashCode(),我如何(在 A 之外)为 A 的实例调用 Object.GetHashCode()?

当然,一种方法是让 A 不实现 IEquatable<>,并始终向我创建的任何字典提供 IEqualityComparer<>,但我希望得到不同的答案。

谢谢

最佳答案

object.ReferenceEquals 的自然匹配是 RuntimeHelpers.GetHashCode .

有关 ObjectReferenceEqualityComparer<T> 的完整详细信息和实现,请参阅此问题的答案: Built-in IEqualityComparer<T> that uses ReferenceEquals

关于c# - 如何在覆盖 GetHashCode() 的类型上使用 Object.GetHashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com