我无法从列表中删除重复项。我究竟做错了什么?
Dim Contacts As New List(Of Person)
...
' remove duplicates '
Contacts = Contacts.Distinct(New PersonEqualityComparer).ToList
我的平等比较器:
Public Class PersonEqualityComparer
Implements IEqualityComparer(Of Person)
Public Function Equals1(ByVal x As Person, ByVal y As Person) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of Person).Equals
Return String.Equals(x.EmailAddress, y.EmailAddress, StringComparison.CurrentCultureIgnoreCase) AndAlso _
String.Equals(x.GivenName, y.GivenName, StringComparison.CurrentCultureIgnoreCase) AndAlso _
String.Equals(x.Surname, y.Surname, StringComparison.CurrentCultureIgnoreCase)
End Function
Public Function GetHashCode1(ByVal obj As Person) As Integer Implements System.Collections.Generic.IEqualityComparer(Of Person).GetHashCode
Return obj.GetHashCode
End Function
End Class
你需要实施GetHashCode1
使得任意两个相等的对象具有相同的哈希码。
如果许多不相等的对象具有相同的哈希码,则执行速度会慢得多,尤其是对于大型列表。换句话说,不要将其更改为Return 0
.
对于您的情况,最简单的实现如下:
Return StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.EmailAddress) _
Xor StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.GivenName) _
Xor StringComparer.CurrentCultureIgnoreCase.GetHashCode(obj.Surname)
如果您想要更强大的实现,请参阅这个答案 https://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c/371348#371348.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)