我实现了一个字典,如下所示:
Dictionary<ErrorHashKey, ErrorRow> dictionary;
我已经在ErrorHashKey
类中定义了Equals()
和GetHashCode()
。我目前正在为该项目编写一些文档,并从IEqualityComparer接口文档:中获得了这些文档
字典需要平等实现确定键是否相等。您可以指定的实现IEqualityComparer通用接口,方法是使用构造函数接受比较器参数;如果您没有指定实现,默认的通用相等比较器EqualityComparer。默认值为习惯于如果类型TKey实现系统。IEquatable泛型接口,默认的相等比较器使用该实现。
我没有做任何文档指定的事情(或者至少我不认为我在做)。我不在构造函数参数中传递比较器,也不创建EqualityComparer.Default
比较器。
System.IEquatable<T> generic interface
是否在创建的每个类中都自动实现?我应该定义IEqualityComparer<T>
的实现吗?
如果未实现IEquatable<T>
,则默认比较器将调用object.Equals
或object.GetHashCode
(重写的方法)。EqualityComparer<T>.Default
的文档中对此进行了记录。您不需要做任何额外的事情,而且IEquatable<T>
不是在您的类中自动实现的。
问题的答案id:
如果未指定实现,则默认的泛型相等比较器EqualityComparer。默认使用
EqualityComparer。如果您没有实现IEquatable,则默认使用Equals
方法。
Default属性检查类型T是否实现系统IEquatable接口,如果是,则返回使用该实现的EqualityComparer。否则,它返回使用重写的EqualityComparer对象Equals和Object。T.提供的GetHashCode
来源:http://msdn.microsoft.com/en-us/library/ms224763(v=vs.110).aspx