2009-07-02 15 views
8

Tengo List<MyObj> con class MyObj : IComparable. Escribí el método CompareTo en la clase MyObj por la interfaz IComparable, pero cuando uso List<MyObj>.Contains(myObjInstance) devuelve false cuando debería ser true.Modificar lista. Contiene comportamiento

No estoy seguro de entender cómo debo proceder para asegurarme de que el List usa mi método de comparación personalizado cuando llamo a la función Contains.

Aquí es mi aplicación compareTo:

#region IComparable Members 

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

    #endregion 

Nota la propiedad es una cadena de símbolos.

Para aclarar, he puesto un punto de parada en ese método CompareTo y ni siquiera entra ahí.

¿Alguien ha intentado eso alguna vez?

Gracias.

+0

¿Nos puede mostrar su código? –

+0

Específicamente la implementación de CompareTo –

Respuesta

22

La forma más fácil y absoluta de averiguar si se llama al método CompareTo es establecer un punto de interrupción y presionar F5 para ejecutar el programa. Pero creo que List<T>.Contains busca la interfaz IEquatable<T> para hacer la comparación.

+0

hecho eso. No se detiene ahí. :( – Lancelot

+0

@Lancelot: lea también la segunda oración; o) –

+0

Lamento leer un poco rápido. Voy a probar eso y dejarte saber. Gracias. :) – Lancelot

2

¿Has intentado anular el método Equals?

List<T>, de acuerdo con el reflector, usa EqualityComparer<T> para verificar la contención, y la implementación predeterminada (ObjectEqualityComparer) usa Igual para la mayoría de los objetos normales.

5

De acuerdo con la documentation para List<T>.Contains, se utiliza ya sea en su aplicación de IEquatable interfaz o object.Equals, que se puede reemplazar también.

Cuestiones relacionadas