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.

È stato utile?

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.

scroll top