假设我有一堂课
Public Class Person
Public Name As String
Public Rank As String
End Class
然后我有一本字典,它使用这些类作为键。我有两个 Person 对象,每个对象在 Name 和 Rank 中都有相同的字符串值,但我发现它们没有被视为相同的键。字典不能这样用吗?
假设我有一堂课
Public Class Person
Public Name As String
Public Rank As String
End Class
然后我有一本字典,它使用这些类作为键。我有两个 Person 对象,每个对象在 Name 和 Rank 中都有相同的字符串值,但我发现它们没有被视为相同的键。字典不能这样用吗?
默认情况下,字典不知道如何比较您的用户制作的类。它不只是比较类中的所有字段。如Dictionary<TKey,TValue> 的备注部分所述:
如果类型 TKey 实现 System.IEquatable 泛型接口,则默认相等比较器使用该实现。
您的 person 类必须实现IEquatable<T>
接口,该接口由一个Equals(Person)
方法组成,如果两个实例应该被视为相等,该方法将返回 true。此外,如IEquatable<T> 的备注中所述:
如果您实现了 IEquatable,您还应该重写 和 的基类实现,
Object.Equals(Object)
以便GetHashCode
它们的行为与IEquatable<T>.Equals
方法的行为一致。