Dictionary<TKey, TValue>会使用 TKey.Equals 和 TKey.GetHashCode 吗?



我实现了一个字典,如下所示:

Dictionary<ErrorHashKey, ErrorRow> dictionary;

我已经在ErrorHashKey类中定义了Equals()GetHashCode()。我目前正在为该项目编写一些文档,并从IEqualityComparer接口文档:中获得了这些文档

字典需要平等实现确定键是否相等。您可以指定的实现IEqualityComparer通用接口,方法是使用构造函数接受比较器参数;如果您没有指定实现,默认的通用相等比较器EqualityComparer。默认值为习惯于如果类型TKey实现系统。IEquatable泛型接口,默认的相等比较器使用该实现。

我没有做任何文档指定的事情(或者至少我不认为我在做)。我不在构造函数参数中传递比较器,也不创建EqualityComparer.Default比较器。

System.IEquatable<T> generic interface是否在创建的每个类中都自动实现?我应该定义IEqualityComparer<T>的实现吗?

如果未实现IEquatable<T>,则默认比较器将调用object.Equalsobject.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

最新更新