我想听听社区关于如何为我的对象实现GetHashCode(或覆盖它)的消息.我理解如果我覆盖equals方法,我需要这样做.我已经实现了相当多的次数,有时只是调用基本方法.我知道如果对象包含相同的细节(成员),我的对象应该等于对象的另一个实例.从班级成员那里获取哈希码的最佳方法是什么?
jas*_*son 48
假设您的课程如下:
class Frob {
public string Foo { get; set; }
public int Bar { get; set; }
public double FooBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
假设您定义了等于两个实例,Frob如果它们Foo和它们Bar相等,FooBar则无关紧要.
然后你应该GetHashCode用Foo和来定义Bar.一种方法是这样的:
return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();
Run Code Online (Sandbox Code Playgroud)
基本上,您只想将所有用于定义相等性的字段合并.一种方法是像我一样继续累积和乘以17.它速度快,简单,正确,通常可以提供良好的分布.
| 归档时间: |
|
| 查看次数: |
57100 次 |
| 最近记录: |