Si vous ne pouvez pas remplacer Equals (ou si vous ne le souhaitez pas), vous pouvez implémenter un objet IEqualityComparer<T>
de votre objet et le transmettre en tant que deuxième paramètre à la méthode Contient (surcharge). Si votre objet est un type de référence, il suffirait simplement de comparer des références au lieu du contenu de l'objet.
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);
Dans ce scénario, foo2 ne serait pas ajouté à la liste. Ce serait sans l'argument de la clé.
Vous devez nous montrer le code de la méthode Contient. – Timores
@Timores: Contains() est une méthode de la liste. –