【问题标题】:GetHashCode(obj): why in some cases it's designed with an argument?GetHashCode(obj):为什么在某些情况下它是用参数设计的?
【发布时间】:2013-02-28 02:20:39
【问题描述】:

我刚刚注意到,例如接口IEqualityComparer<T> 提供public int GetHashCode(T obj)
我在另一个接口/类中经常看到public int GetHashCode() 变体。为什么它是用输入参数设计的?我知道在“带参数”的情况下,返回值不会基于调用者对象,而是基于方法的参数。在我看来,它需要的唯一方法是 GetHashCode 的空对象,是吗?
最后一个问题:调用者对象应该是什么(即 GetHashCode 方法的所有者)?

谢谢!


UPD。将最早存在的答案标记为答案。非常感谢!

【问题讨论】:

    标签: c# gethashcode


    【解决方案1】:

    因为IEqualityComparer<T> 比较的是其他对象,而不是它自己。因此它需要Equals 的两个参数(比较其他两个对象)和GetHashCode 的一个参数(获取其他对象的哈希码)。

    【讨论】:

    • 哦,可怜的我,我没有注意到这个甚至以接口的名义存在的观点!谢谢你:)
    【解决方案2】:

    这是IEqualityComparerIEquatable 之间的区别。

    您会看到IComparerIComparable 之间的相同差异。

    在这两种情况下,第一种类型是比较其他东西,因此它需要接受其他东西作为参数。第二种类型是将“我自己”与某物进行比较,因此总会少一个参数(本质上是this 参数)。

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 2012-02-11
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2020-02-22
      相关资源
      最近更新 更多