tags:

views:

265

answers:

5

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.

A: 

The docs say "This method determines equality using the default equality comparer EqualityComparer(T).Default".

Logan Capaldo
Which trys `IEquatable<T>`, then falls back on `.Equals()` and `.GetHashCode()`.
Simon Buchan
+1  A: 

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 new List<T>.

Andrew Hare
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
roman m
+1  A: 

You need to overload Object.Equals(Object obj) in your class.

Trevor
+4  A: 

You should override Equals and GetHashCode method.

redjackwong
While this DOES work, implementing IEquatable is better because it's type safe, whereas Equals is not.
BFree
@BFree: good point
roman m
Agree. But I think you should still override your GetHashCode method. This gives you better performance.
redjackwong
+7  A: 

Your Person class should implement IEquatable

BFree