Si no tiene la capacidad de anular Iguales (o si simplemente no desea), puede implementar un IEqualityComparer<T>
de su objeto y pasarlo como el segundo parámetro al método Contiene (sobrecarga). Si su objeto es un tipo de referencia, de lo contrario simplemente estaría comparando referencias en lugar de los contenidos del objeto.
class Foo
{
public string Blah { get; set; }
}
class FooComparer : IEqualityComparer<Foo>
{
#region IEqualityComparer<Foo> Members
public bool Equals(Foo x, Foo y)
{
return x.Blah.Equals(y.Blah);
}
public int GetHashCode(Foo obj)
{
return obj.Blah.GetHashCode();
}
#endregion
}
...
Foo foo = new Foo() { Blah = "Apple" };
Foo foo2 = new Foo() { Blah = "Apple" };
List<Foo> foos = new List<Foo>();
foos.Add(foo);
if (!foos.Contains(foo2, new FooComparer()))
foos.Add(foo2);
En este escenario, foo2 no se añadiría a la lista. Lo haría sin el argumento del comparador.
Debe mostrarnos el código del método Contiene. – Timores
@Timores: Contains() es un método en la lista. –