Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetHashCode(obj):为什么在某些情况下它';它是用论点设计的?_C#_Gethashcode - Fatal编程技术网

C# GetHashCode(obj):为什么在某些情况下它';它是用论点设计的?

C# GetHashCode(obj):为什么在某些情况下它';它是用论点设计的?,c#,gethashcode,C#,Gethashcode,我刚刚注意到,例如interfaceIEqualityComparer提供了public int-GetHashCode(T-obj) 我经常在另一个接口/类中看到public int GetHashCode()变量。为什么它是用输入参数设计的?我知道在“with argument”情况下,返回的值不会基于调用方对象,而是基于方法的参数。在我看来,获取null对象的hashcode是唯一需要的方法,是吗 最后一个问题:调用方对象应该是什么(即GetHashCode方法的所有者) 谢谢 UPD。

我刚刚注意到,例如interface
IEqualityComparer
提供了
public int-GetHashCode(T-obj)

我经常在另一个接口/类中看到
public int GetHashCode()
变量。为什么它是用输入参数设计的?我知道在“with argument”情况下,返回的值不会基于调用方对象,而是基于方法的参数。在我看来,获取null对象的hashcode是唯一需要的方法,是吗
最后一个问题:调用方对象应该是什么(即GetHashCode方法的所有者)

谢谢



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

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

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

这是
IEqualityComparer
IEquatable
之间的区别

您可以看到
IComparer
IComparable
之间的相同差异


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

这是
IEqualityComparer
IEquatable
之间的区别

您可以看到
IComparer
IComparable
之间的相同差异


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

哦,可怜的我,我没有注意到这个观点,即使是以接口的名义存在!谢谢:)哦,可怜的我,我没有注意到这种观点,甚至在界面的名称中也存在!谢谢:)