我有一个实现IEquatable 的类A,使用其字段(例如A.b和A.c)实现/覆盖Equals()和GetHashCode(),并且一切正常,在99%的时间内运行良好。 A类是层次结构(B,C类)的一部分,它们都从接口(interface)D继承;它们都可以一起存储在字典Dictionary中,因此当它们都携带自己的默认Equals()/GetHashCode()时很方便。但是,在构造A时,我有时需要做一些工作来获取A.b和A.c的值;发生这种情况时,我想存储对正在构建的实例的引用。在那种情况下,我不想使用A提供的默认Equals()/GetHashCode()覆盖。因此,我正在考虑实现ReferenceEqualityComparer,这是为了强制使用Object的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/
10-14 17:49