1

假设我有一堂课

Public Class Person
Public Name As String
Public Rank As String
End Class

然后我有一本字典,它使用这些类作为键。我有两个 Person 对象,每个对象在 Name 和 Rank 中都有相同的字符串值,但我发现它们没有被视为相同的键。字典不能这样用吗?

4

1 回答 1

3

默认情况下,字典不知道如何比较您的用户制作的类。它不只是比较类中的所有字段。如Dictionary<TKey,TValue> 的备注部分所述:

如果类型 TKey 实现 System.IEquatable 泛型接口,则默认相等比较器使用该实现。

您的 person 类必须实现IEquatable<T>接口,该接口由一个Equals(Person)方法组成,如果两个实例应该被视为相等,该方法将返回 true。此外,如IEquatable<T> 的备注中所述

如果您实现了 IEquatable,您还应该重写 和 的基类实现,Object.Equals(Object)以便GetHashCode它们的行为与IEquatable<T>.Equals方法的行为一致。

于 2012-12-14T17:38:11.537 回答