Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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# GetHashCodes-如何以及何时使用?_C#_Hashcode - Fatal编程技术网

C# GetHashCodes-如何以及何时使用?

C# GetHashCodes-如何以及何时使用?,c#,hashcode,C#,Hashcode,好的重写GetHashCode方法应该是什么样子?(例如,对于包含三个字符串属性的纯模型类),在编写此类方法时是否有任何通用原则/模式?具体在哪里使用(除了哈希表/字典)?在比较对象相等性时,依赖哈希代码是一个好主意吗?我喜欢使用: 哈希表以及使用它们的任何东西都依赖于GetHashCode。就这样,iirc。最好的方法是,iirc,取所有的整型字段,用一堆素数相乘。你也可以假设两个相等的对象有相同的散列码,但是你不能假设具有相同哈希代码的两个对象相等。因此,如果我们不能假设具有相同哈希代码的对

好的重写
GetHashCode
方法应该是什么样子?(例如,对于包含三个字符串属性的纯模型类),在编写此类方法时是否有任何通用原则/模式?具体在哪里使用(除了哈希表/字典)?在比较对象相等性时,依赖哈希代码是一个好主意吗?

我喜欢使用:


哈希表以及使用它们的任何东西都依赖于GetHashCode。就这样,iirc。最好的方法是,iirc,取所有的整型字段,用一堆素数相乘。你也可以假设两个相等的对象有相同的散列码,但是你不能假设具有相同哈希代码的两个对象相等。因此,如果我们不能假设具有相同哈希代码的对象相等,那么为什么例如IEqualityComparer强制我们实现GetHashCode(t)方法而不仅仅是纯相等?因为第一位:如果两个对象被认为相等,那么它们的哈希代码必须相等。如果在不重写GetHashCode()的情况下实现Equals(),那么Equals()可能会为两个对象返回true,这两个对象的GetHashCode()值不同,这是错误的。(默认情况下,GetHashCode()通常为具有不同引用的对象返回不同的值,即使这些对象中的字段相等。)
public override int GetHashCode()
{
    unchecked
    {
        int hash = 17;
        // Check for null
        hash = hash * 29 + field1.GetHashCode();
        hash = hash * 29 + field2.GetHashCode();
        return hash;
    }
}