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.
-
The docs say "This method determines equality using the default equality comparer
EqualityComparer(T).Default
".Simon Buchan : Which trys `IEquatable`, then falls back on `.Equals()` and `.GetHashCode()`. -
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>
.roman m : thanx for detail, i used that code as a reference to fill a new List from the original by checking .Contains() on the new list on ever iteration -
You need to overload Object.Equals(Object obj) in your class.
-
You should override Equals and GetHashCode method.
BFree : While this DOES work, implementing IEquatable is better because it's type safe, whereas Equals is not.roman m : @BFree: good pointredjackwong : Agree. But I think you should still override your GetHashCode method. This gives you better performance. -
Your Person class should implement IEquatable
0 comments:
Post a Comment