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
资料来源: