comportamento Modificar List.Contains
-
21-08-2019 - |
Pergunta
Eu tenho um List<MyObj>
com o class MyObj : IComparable
. Eu escrevi o CompareTo
método na classe MyObj
pela interface IComparable
, mas quando eu uso o List<MyObj>.Contains(myObjInstance)
ele retorna false
quando deveria ser true
.
Eu não estou certo que eu estou entendendo como eu preciso proceder para garantir que o List
usa meu método de comparação personalizada ao chamar a função seguida Contains
.
Aqui está minha implementação compareTo:
#region IComparable Members
public int CompareTo(object obj)
{
MyObj myObj = (MyObj)obj;
return String.Compare(this.Symbol, myObj.Symbol, true);
}
#endregion
Observe a propriedade símbolo é uma string.
Para esclarecer eu colocar um ponto de parada em que o método compareTo e nem sequer ir lá.
Qualquer um já tentou isso?
Graças.
Solução
A maneira mais fácil absoluta para descobrir se o seu método CompareTo é chamado é para definir um ponto de interrupção nele e aperte F5 para executar o programa. Mas eu acredito que se parece List<T>.Contains
para o IEquatable<T>
interface de para fazer a comparação.
Outras dicas
Você tentou substituir o método Equals?
List<T>
, de acordo com refletor, usos EqualityComparer<T>
para verificar se há contenção, e a implementação padrão (ObjectEqualityComparer) usos iguais para a maioria dos objetos normais.