Modificare il comportamento List.Contains
-
21-08-2019 - |
Domanda
Ho un List<MyObj>
con il class MyObj : IComparable
. Ho scritto il metodo CompareTo
nel MyObj
classe secondo il IComparable
interfaccia, ma quando uso il List<MyObj>.Contains(myObjInstance)
restituisce false
quando dovrebbe essere true
.
Non sono sicuro di capire come devo procedere per assicurarsi che il List
usa il mio metodo di confronto personalizzato quando si chiama quindi la funzione Contains
.
Ecco la mia implementazione compareTo:
#region IComparable Members
public int CompareTo(object obj)
{
MyObj myObj = (MyObj)obj;
return String.Compare(this.Symbol, myObj.Symbol, true);
}
#endregion
Si noti la proprietà simbolo è una stringa.
Per chiarire che ho messo un punto di sosta in quel metodo compareTo e non ha nemmeno entrare.
Qualcuno ha mai provato?
Grazie.
Soluzione
Il modo più semplice in assoluto per scoprire se il metodo viene chiamato CompareTo è quello di impostare un punto di interruzione in esso e premere F5 per eseguire il programma. Ma credo che List<T>.Contains
cerca l'interfaccia IEquatable<T>
rendendo il confronto.
Altri suggerimenti
Hai provato l'override del metodo Equals?
List<T>
, secondo riflettore, EqualityComparer<T>
utilizza per controllare il contenimento, e l'implementazione di default (ObjectEqualityComparer) utilizza uguale per la maggior parte degli oggetti normali.