Tag: gethashcode

具有多个数据成员的对象的GetHashCode

public class MyClass { public string x; public string y; } public class MyClassEqualityComparer : IEqualityComparer { public int GetHashCode(MyClass myobj) { if(myObj == null) { return base.GetHashCode(); } if (myObj.x != null && myObj.y != null) { return myObj.x.GetGashCode()^myObj.y.GetGashCode(); } } } 如果myObj.x或/和myObj.y为空,应该是什么实现

字典使用是自定义键,但键始终不相等

我在字典中使用RTBTextPointer作为自定义键… Init.SpintaxEditorPropertyMain.SpintaxListDict = new Dictionary(new RTBTextPointerComparer()); 我在类库中编写RTBTextPointer和RTBTextPointerComparer类,并在不同的wpf项目中使用它, if (Init.SpintaxEditorPropertyMain.SpintaxListDict.ContainsKey(_index) == false) { Init.SpintaxEditorPropertyMain.SpintaxListDict.Add(_index,_SpintaxMappedVal); } everytime containsKey返回false,即使它包含,所以在字典中出现重复条目​​..我的“GetHashCode()”中有任何错误 public class RTBTextPointer { static int _row; static int _column; public int Row { get { return _row; } set { _row = value; } } public int Column { get { return _column; } set { _column = […]

字典C中的GetHashCode和Equals实现#

我来到这个网站,在Dictionary中搜索对象比较,我开始知道重写GetHashCode和Equals是在C#中进行对象比较的必要条件。 这是我尝试使用FOREACH迭代方法解决的一段代码。 但是由于性能问题,我的Boss说不使用任何迭代(可能使用containskey或containsvalue方法)也是如此。 任何帮助都非常欢迎.. public class employee { public string empname { get; set; } public string location { get; set; } public double kinid { get; set; } public double managerKin { get; set; } public override bool Equals(object obj) { return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } } public […]

GetHashCode用于多个布尔值

在下面的StackOverflow 问题中, Jon Skeets的回答指出了一个很好的实现是…… // Note: Not quite FNV! public override int GetHashCode() { unchecked // Overflow is fine, just wrap { int hash = (int) 2166136261; // Suitable nullity checks etc, of course 🙂 hash = (hash * 16777619) ^ bool1.GetHashCode(); hash = (hash * 16777619) ^ bool2.GetHashCode(); return hash; } } 如果两个字段都是bool怎么办? 这仍然是一个很好的实现还是会有点矫枉过正? […]

.Net HashSet唯一性计算完全基于哈希码吗?

我想知道.Net HashSet是完全基于哈希码还是它也使用相等? 我有一个特定的类,我可能会实例化数百万个实例,并且有一些合理的可能性,即某些哈希码将在该点发生冲突。 我正在考虑使用HashSet来存储这个类的一些实例,我想知道它是否真的值得做 – 如果一个元素的唯一性只是在它的哈希码上确定那么对我来说对于实际的应用程序没用 MSDN文档在这个主题上似乎相当含糊 – 任何启示都会受到赞赏

我是否正确实现了Equals()/ GetHashCode()?

该计划正在实施此实施: class Instrument { public string ClassCode { get; set; } public string Ticker { get; set; } public override string ToString() { return ” ClassCode: ” + ClassCode + ” Ticker: ” + Ticker + ‘.’; } } 但因为我需要在Dictionary中使用Instrument,所以我决定实现equals / hashcode: class Instrument { public string ClassCode { get; set; } public string Ticker […]

使用IEqualityComparer和Equals / GethashCode Override有什么区别?

当我使用字典有时我必须更改默认的等于意思,以便比较键。 我看到如果我覆盖键的类上的Equals和GetHashCode,或者我创建了一个实现IEqualityComparer的新类,我有相同的结果。 那么使用IEqualityComparer和Equals / GethashCode Override有什么区别? 两个例子: class Customer { public string name; public int age; public Customer(string n, int a) { this.age = a; this.name = n; } public override bool Equals(object obj) { Customer c = (Customer)obj; return this.name == c.name && this.age == c.age; } public override int GetHashCode() { return (this.name […]

String.GetHashCode()返回不同的值

为什么GetHashCode()为同一个字符串返回不同的值? 我无法描述如何复制这个,但相信这不是一个恶作剧,以下两行来自我的观察窗口,分别是两次: “DDD.Events.Application.ApplicationReferenceCreated”.GetHashCode() -1386151123 int “DDD.Events.Application.ApplicationReferenceCreated”.GetHashCode() 1858139950 int 怎么会发生这种情况? 我不知道这是否有帮助,但我在VS 2010中运行.NET 4.0并且我正在调试NServiceBus应用程序。 更新: 如果你想知道我最后做了什么,看看这个线程: 你能在x64模式下运行时生成x86哈希值吗?

如何选择素数来计算哈希码?

这个问题遵循Jon Skeet在这个问题上给出的答案:“ 覆盖System.Object.GetHashCode的最佳算法是什么? ”。 要计算哈希码,请使用以下算法: public override int GetHashCode() { unchecked // Overflow is fine, just wrap { int hash = 17; // Suitable nullity checks etc, of course 🙂 hash = hash * 23 + field1.GetHashCode(); hash = hash * 23 + field2.GetHashCode(); hash = hash * 23 + field3.GetHashCode(); return hash; } } […]

使用xor的GetHashCode()问题

我的理解是你通常应该使用xor和GetHashCode()来生成一个int来通过它的值来识别你的数据(而不是通过它的引用)。 这是一个简单的例子: class Foo { int m_a; int m_b; public int A { get { return m_a; } set { m_a = value; } } public int B { get { return m_b; } set { m_b = value; } } public Foo(int a, int b) { m_a = a; m_b = b; } public […]