C# 威尔字典<;TKey,TValue>;使用TKey.Equals和TKey.GetHashCode?

C# 威尔字典<;TKey,TValue>;使用TKey.Equals和TKey.GetHashCode?,c#,C#,我实现了一个字典,如下所示: Dictionary<ErrorHashKey, ErrorRow> dictionary; 字典; 我在ErrorHashKey类中定义了Equals()和GetHashCode()。我目前正在为该项目编写一些文档,并通过以下途径获得: 字典需要一个平等实现来 确定关键点是否相等。您可以指定的实现 IEqualityComparer通过使用 接受比较器参数;如果未指定实现, 默认的通用相等比较器EqualityComparer。默认值为 用过。如果

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

Dictionary<ErrorHashKey, ErrorRow> dictionary;
字典;
我在
ErrorHashKey
类中定义了
Equals()
GetHashCode()
。我目前正在为该项目编写一些文档,并通过以下途径获得:

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

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


System.IEquatable泛型接口是否在创建的每个类中自动实现?我应该定义
IEqualityComparer
的实现吗?

如果未实现
IEquatable
,默认的比较器将调用
object.Equals
object.GetHashCode
(覆盖的方法)。这一点在网站上有记录。您不需要做任何额外的事情,而且不,
IEquatable
不会自动在您的类中实现。

问题中的答案id:

如果未指定实现,则默认的泛型相等 比较器EqualityComparer。使用默认值

EqualityComparer.Default是使用
Equals
方法,如果您没有实现IEquatable

默认属性检查类型T是否实现 System.IEquatable接口,如果是,则返回 使用该实现的EqualityComparer。否则, 返回使用的重写的EqualityComparer 由T提供的Object.Equals和Object.GetHashCode

资料来源: