等效对象的字典不起作用,或者我做错了什么?

时间:2012-12-14 17:28:51

标签: vb.net

让我说我有一个班级

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

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

1 个答案:

答案 0 :(得分:3)

默认情况下,字典不知道如何比较用户自定义的类。 只是比较类中的所有字段。如remarks section for Dictionary<TKey,TValue>中所述:

  

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

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

  

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