让我说我有一个班级
Public Class Person
Public Name As String
Public Rank As String
End Class
然后我有一个字典,它使用这些类作为键。我有两个Person对象,每个对象在Name和Rank中都有相同的字符串值,但我发现它们不被视为相同的键。字典不能以这种方式使用吗?
答案 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
方法的行为一致。