如何确保 List.Contains(T) 适用于我的自定义类?
我使用 .net 2.0 (C#)
我有一个 Person 类,并且我 pupulate List< 人> p 来自数据库。
我知道我的列表有重复项,但是当我尝试 删除重复项它们不会被删除。
我的 Person 类是否需要实现 List< 的任何接口 T>.Contains(T) 能否正常工作?
还有其他想法吗?
谢谢。
I use .net 2.0 (C#)
I have a Person class, and i pupulate List< Person> p from the database.
i know for a fact that my list has duplicates, but when i try to remove the duplicates they don't get removed.
Does my Person class need to implement any interfaces for List< T>.Contains(T) to work properly?
Any other ideas?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您的 Person 类应实现 IEquatable
Your Person class should implement IEquatable
您应该重写 Equals 和 GetHashCode 方法。
You should override Equals and GetHashCode method.
您引用的示例不是从列表中删除重复项的解决方案,它是一个接受列表并生成一个排除重复项的迭代器的函数。 如果您需要一次性删除整个列表的重复数据,则需要获取从函数返回的
IEnumerable
并将其传递到新的List
中。The example you reference is not a solution for removing dupes from a list, it is a function that takes a list and yields an iterator that will exclude duplicates. If you need to dedupe the entire list in one go you would need to take the
IEnumerable<T>
returned from the function and pass it into a newList<T>
.您需要在类中重载 Object.Equals(Object obj) 。
You need to overload Object.Equals(Object obj) in your class.
文档说“此方法使用默认的相等比较器来确定相等性<代码>EqualityComparer(T).Default”。
The docs say "This method determines equality using the default equality comparer
EqualityComparer(T).Default
".