-
53 votesanswersviews
覆盖可变对象的GetHashCode?
我已经阅读了关于何时以及如何覆盖 GetHashCode 的10个不同的问题,但是's still something I don' t得到了 . GetHashCode 的大多数实现都是基于对象字段的哈希码,但是引用的是 GetHashCode 的值在对象的生命周期内永远不会改变 . 如果它所基于的字段是可变的,那该怎么办?另外,如果我希望字典查找等基于引用相等而不是我的重写 Equals ... -
3 votesanswersviews
如何在重写GetHashCode()的类型上使用Object.GetHashCode()
我有一个实现IEquatable <>的类A,使用它的字段(例如,A.b和A.c)来实现/重写Equals()并覆盖GetHashCode(),并且99%的时候一切正常 . A类是层次结构(B类,C类)的一部分,它们都从接口D继承;它们都可以存储在字典词典中,因此当它们都带有自己的默认Equals()/ GetHashCode()时很方便 . 但是,在构建A时,有时需要做一些工作来获... -
0 votesanswersviews
字典项的GetHashCode
我为我的一个类重写了Equals方法 . 在该方法中,我检查每对字典与另一个实例的字典的相等性,如下所示 public override bool Equals (object obj) { ... // compare to make sure all <key, value> pair of this.dict have //... -
1 votesanswersviews
覆盖GetHashCode变体
我有一个理论类Name_Order,它有一个字符串 Name 和一个int Order . 我需要指出两个 Name_Order 是不同的,如果NameOrder对不同,那么,或者名称或顺序是不同的 . 现在,重写Equals没问题,但我有一些"issues"与GetHashCode: Public Class Name_Order Public Property Na... -
5 votesanswersviews
可以在类中使用GUID私有属性,以便在GetHashCode覆盖中使用它吗?
可以在类中使用GUID私有属性,以便在GetHashCode覆盖中使用它吗? 就像是: public class Voucher : IComparable<Voucher>, IComparable, IEquatable<Voucher> { private Guid? _guid; private Guid Guid { g... -
6 votesanswersviews
GetHashCode的好习惯?
对于Delphi项目(使用RAD Studio XE7构建),我想创建一个画笔字典 . 每个字典项包含一个TMyBrush对象作为键,描述要检索的画笔,以及GDI画笔作为值 . TMyBrush类包含3个字段 用于确定画笔类型的枚举类型(实体,渐变,...) 描述画笔内容的TBrushInfo类(颜色,换行模式......) 表示钳位字段的TRect 在我的字典中,我想根据他的特征... -
1 votesanswersviews
当空间大于32位时,如何实现GetHashCode兼容的Equals方法?
在.NET中,您需要Equals(object)和GetHashCode()兼容 . 但有时你不能: public class GreaterThan32Bits { public int X { get; set; } public int Y { get; set; } } 由于数据密度大于32位,并且GetHashCode返回Int32,因此您将拥有3个解决方案(假设正确实... -
12 votesanswersviews
应该什么时候.NET类覆盖等于()?什么时候不应该?
VS2005文档Guidelines for Overloading Equals() and Operator == (C# Programming Guide)部分说明 不建议在非不可变类型中覆盖operator == . 较新的.NET Framework 4文档Guidelines for Implementing Equals and the Equality Operator (=... -
0 votesanswersviews
GetHashCode等于C#中类的实现
我有一个类Person,我必须覆盖它的Equals和GetHashCode方法 . 如果名称匹配,则两个人对象等于电子邮件匹配 . 使用相当高效的哈希函数,这样做的好方法是什么? class Person { string Name string Email public override Equals(object obj) { if (Refe... -
9 votesanswersviews
使用xor的GetHashCode()问题
我的理解是你通常应该使用xor和GetHashCode()生成一个int来通过它的值来识别你的数据(而不是通过它的引用) . 这是一个简单的例子: class Foo { int m_a; int m_b; public int A { get { return m_a; } set { m_a = value; } } ... -
126 votesanswersviews
GetHashCode在.NET中的IEqualityComparer <T>中的作用是什么?
我试图理解IEqualityComparer接口的GetHashCode方法的作用 . 以下示例来自MSDN: using System; using System.Collections.Generic; class Example { static void Main() { try { BoxEqualityComparer boxEqC =... -
-1 votesanswersviews
IEqualityComparer实现中GetHashCode和Equals之间的关系是什么? [重复]
这个问题在这里已有答案: Why is it important to override GetHashCode when Equals method is overridden? 12个答案 IEqualityComparer GetHashCode being called but Equals not 4个答案 我有一个继承自B类并实现 IEqualityComparer<... -
10 votesanswersviews
通用IEqualityComparer <T>和GetHashCode
对于实现大量的IEqualityComparers有些懒惰,并且考虑到我无法轻松编辑被比较对象的类实现,我使用了以下内容,意在与Distinct()和Except()扩展方法一起使用 . : public class GenericEqualityComparer<T> : IEqualityComparer<T> { Func<T, T, bool>... -
3 votesanswersviews
如何在F#中为一个受歧视的联盟覆盖GetHashCode和CompareTo?
我有一个简单的F#区分联合,它结合了bool,一个字符串和一个浮点数 . 我想覆盖此联合的Object.Equals(arg),以便在检查浮点相等时我可以放入epsilon来解决精度错误 . 编译器抱怨说如果我覆盖this.Equals(arg),我也应该重写this.GetHashCode()和this.CompareTo(arg) . 对于这些覆盖,我没有计划特殊功能,所以我只想调用这些方法的... -
0 votesanswersviews
GetHashCode&Equals覆盖Collection相等性
我需要一个带有复合键的字典 . 到目前为止,我一直在使用元组: Dictionary<(string key1, string key2, Datetime key3), TValue> groups = ... 但是现在我需要将键指定为属性的运行时列表 . 就像是 var key = new CompositeKey(); key.Add(key1) key.Add(key2) k... -
1 votesanswersviews
重写Equals和GetHashCode - 派生类中的默认实现
我对C#中Equals和GetHashCode的默认行为有点困惑 . 假设我有两个类,一个派生自另一个: public abstract class Question { public string QuestionText { get; set; } public overr... -
79 votesanswersviews
正确的方法来重写Equals()和GetHashCode()[重复]
这个问题在这里已有答案: What's the best strategy for Equals and GetHashCode? 5个答案 我之前从未真正这样做过,所以我希望有人可以告诉我正确的实现我的类的Except()和GetHashCode()的重写 . 我正在尝试修改类,以便我可以使用LINQ Except()方法 . public class RecommendationDTO{p... -
2 votesanswersviews
覆盖GetHashCode并从字符串属性中获取它是否安全?
我上课了: public class Item { public string Name { get; set; } public override int GetHashCode() { return Name.GetHashCode(); } } 重写GetHashCode的目的是我希望在Dictionary中只有一个具有指定名称的对象出现 ... -
2 votesanswersviews
如何在匿名类型上实现Equals和GetHashCode?
帮助说: 匿名类型是直接从对象派生的类类型,不能转换为除object之外的任何类型 . 编译器为每个匿名类型提供名称,尽管您的应用程序无法访问它 . 从公共语言运行库的角度来看,匿名类型与任何其他引用类型没有区别 . 如果程序集中的两个或多个匿名对象初始值设定项指定了具有相同顺序且具有相同名称和类型的属性序列,则编译器会将对象视为相同类型的实例 . 它们共享相同的编译器生成的类型信息 . 因为匿... -
3 votesanswersviews
如何使用覆盖的逻辑Equals()实现GetHashCode()的覆盖
我有一些类如下,我已经为几乎所有的类实现了 Equals(Object) 方法 . 但我不知道怎么写 GetHashCode() . 到目前为止,我在 Dictionary 集合中使用这些数据类型作为值类型,我想我应该覆盖 GetHashCode() . 1.我不知道如何用 Equals(Object) 的逻辑实现 GetHashCode() . 2.有一些派生类,如果我覆盖 GetHash... -
15 votesanswersviews
使用IEqualityComparer和Equals / GethashCode Override有什么区别?
当我使用字典有时我必须更改默认的等于意思,以便比较键 . 我看到如果我在键的类上重写Equals和GetHashCode,或者我创建了一个实现IEqualityComparer的新类,我有相同的结果 . 那么使用IEqualityComparer和Equals / GethashCode Override有什么区别?两个例子: class Customer { public string ... -
0 votesanswersviews
为什么GetHashCode应该实现与Equals相同的逻辑?
在this MSDN页面中它说: 警告:如果重写GetHashCode方法,则还应该重写Equals,反之亦然 . 如果在对两个对象进行相等性测试时,重写的Equals方法返回true,则重写的GetHashCode方法必须为这两个对象返回相同的值 . 我也看到了许多类似的建议,我可以理解,当重写Equals方法时,我也想要覆盖GetHashCode . 据我所知,GetHashCode与哈希... -
4 votesanswersviews
小班的好哈希? (覆盖GetHashCode)
我使用一些包含1-2个int的标识类/结构,也可以是日期时间或小字符串 . 我将它们用作字典中的键 . 对于像这样的东西,GetHashCode的优秀覆盖是什么?一些非常简单但仍然有点高效的希望 . 谢谢 -
1271 votesanswersviews
覆盖System.Object.GetHashCode的最佳算法是什么?
在.NET中, System.Object.GetHashCode 方法在很多地方使用,遍及.NET基类库 . 特别是在快速查找集合中的项目或确定相等性时 . 是否有关于如何为我的自定义类实现 GetHashCode 覆盖的标准算法/最佳实践,因此我不会降低性能?