Modificar el comportamiento List.Contains
-
21-08-2019 - |
Pregunta
Tengo un List<MyObj>
con el class MyObj : IComparable
. Escribí el método CompareTo
en el MyObj
clase por el IComparable
interfaz, pero cuando se utiliza la List<MyObj>.Contains(myObjInstance)
vuelve false
cuando debería ser true
.
No estoy seguro de que estoy entender cómo tengo que proceder a asegurarse de que el List
utiliza mi método comparación personalizada al llamar a continuación, la función Contains
.
Aquí está 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
Tenga en cuenta la propiedad del símbolo es una cadena.
Para aclarar He puesto un punto de parada en ese método compareTo y que ni siquiera ir allí.
Cualquier persona que ha intentado alguna vez?
Gracias.
Solución
La manera más fácil absoluta para averiguar si su método se llama CompareTo es establecer un punto de interrupción en ella y pulsa F5 para ejecutar el programa. Pero yo creo que List<T>.Contains
busca la interfaz IEquatable<T>
hacer la comparación.
Otros consejos
¿Usted intentó anular el método Equals?
List<T>
, de acuerdo con reflector, utiliza EqualityComparer<T>
para comprobar la contención, y la implementación predeterminada (ObjectEqualityComparer) utiliza es igual para la mayoría de los objetos normales.