Question

J'ai un avec le List<MyObj> class MyObj : IComparable. J'ai écrit la méthode dans la CompareTo classe par l'MyObj l'interface IComparable, mais quand je l'utilise, il retourne List<MyObj>.Contains(myObjInstance) quand il doit false être true.

Je ne sais pas je comprends comment je dois procéder pour vous assurer que l'utilise ma méthode List de comparaison personnalisée lors de l'appel puis la fonction Contains.

Voici mon implémentation de compareTo:

    #region IComparable Members

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

    #endregion

Notez la propriété Symbol est une chaîne.

Pour clarifier, j'ai mis un point d'arrêt dans cette méthode compareTo et il ne va même pas là-dedans.

Tout le monde a déjà essayé?

Merci.

Était-ce utile?

La solution

La meilleure façon absolue pour savoir si votre méthode de CompareTo est appelée est de mettre un point d'arrêt dans le et appuyez sur F5 pour exécuter votre programme. Mais je crois que recherche l'List<T>.Contains l'interface IEquatable<T> faire la comparaison.

Autres conseils

Selon le List<T>.Contains, il utilise soit votre implémentation de l'interface ou IEquatable object.Equals, que vous pouvez remplacer ainsi.

Avez-vous essayé redéfinissant la méthode Equals?

List<T>, selon réflecteur, EqualityComparer<T> utilise pour vérifier le confinement et la mise en oeuvre par défaut (ObjectEqualityComparer) utilise Égale pour la plupart des objets normaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top