4

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

Dictionary<ErrorHashKey, ErrorRow> dictionary;

我已经在课堂上定义Equals()了。我目前正在为该项目编写一些文档,并且来自IEqualityComparer Interface docGetHashCode()ErrorHashKey

字典需要一个相等的实现来确定键是否相等。您可以使用接受比较器参数的构造函数来指定 IEqualityComparer 通用接口的实现;如果未指定实现,则使用默认的通用相等比较器 EqualityComparer.Default。如果类型 TKey 实现 System.IEquatable 泛型接口,则默认相等比较器使用该实现。

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

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

4

2 回答 2

7

如果未实现,默认比较器将调用object.Equalsobject.GetHashCode(您的覆盖方法) 。IEquatable<T>这记录EqualityComparer<T>.Default. 你不需要做任何额外的事情,不,IEquatable<T>不会在你的类中自动实现。

于 2012-08-21T14:46:43.503 回答
1

您问题中的答案ID:

如果不指定实现,则使用默认的通用相等比较器 EqualityComparer.Default

Equals如果您没有实现 IEquatable,则EqualityComparer.Default 正在使用该方法。

Default 属性检查类型 T 是否实现了 System.IEquatable 接口,如果是,则返回使用该实现的 EqualityComparer。否则,它返回一个使用 T 提供的 Object.Equals 和 Object.GetHashCode 覆盖的 EqualityComparer。

来源: http: //msdn.microsoft.com/en-us/library/ms224763 (v=vs.110).aspx

于 2012-08-21T14:48:34.153 回答