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.

Foi útil?

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

De acordo com a documentação para List<T>.Contains, ele usa tanto sua implementação de interface de IEquatable ou object.Equals, que você pode substituir bem.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top