2009-07-02 16 views
8

I have a con class MyObj : IComparable. Ho scritto il metodo CompareTo nella classe per l'interfaccia IComparable, ma quando uso lo List<MyObj>.Contains(myObjInstance) restituisce false quando deve essere true.Modify List.Contains behavior

Non sono sicuro di capire come devo procedere per assicurarmi che il List usi il mio metodo di confronto personalizzato quando chiami la funzione Contains.

Qui è la mia realizzazione compareTo:

#region IComparable Members 

    public int CompareTo(object obj) 
    { 
     MyObj myObj = (MyObj)obj; 
     return String.Compare(this.Symbol, myObj.Symbol, true); 
    } 

    #endregion 

Nota la proprietà simbolo è una stringa.

Per chiarire ho messo un punto di arresto in quel metodo compareTo e non entra nemmeno lì.

Chiunque ci ha mai provato?

Grazie.

+0

Puoi mostrarci il tuo codice? –

+0

In particolare l'implementazione di CompareTo –

risposta

22

Il modo più semplice per scoprire se si chiama il metodo CompareTo è impostare un punto di interruzione e premere F5 per eseguire il programma. Ma credo che List<T>.Contains cerchi l'interfaccia IEquatable<T> per fare il confronto.

+0

lo ha fatto. Non si ferma qui. :( – Lancelot

+0

@Lancelot: Leggi anche la seconda frase; o) –

+0

Scusa se ho letto un po 'veloce. Ci proverò e ti farò sapere. Grazie. :) – Lancelot

2

Hai provato a sovrascrivere il metodo Equals?

List<T>, in base al riflettore, utilizza EqualityComparer<T> per verificare il contenimento e l'implementazione predefinita (ObjectEqualityComparer) utilizza Equals per la maggior parte degli oggetti normali.

5

Secondo il documentation per List<T>.Contains, utilizza sia l'implementazione di IEquatable interfaccia o object.Equals, che è possibile ignorare pure.

Problemi correlati