Linq .À l'exception de la fonction “d'Au moins un objet doit implémenter IComparable.”

Fondamentalement, j'ai un conteneur qui implémente IEquatable (exemple illustré ci-dessous)

public class ContainerClass  : IEquatable<ContainerClass>
{
        public IEnumerable<CustomClass> CustomClass { get; set; }

        public override bool Equals(object obj) { ... }
        public bool Equals(ContainerClass other) { ... }
        public static bool operator ==(ContainerClass cc1, ContainerClass cc2) { ... }
        public static bool operator !=(ContainerClass cc1, ContainerClass cc2) { ... }
        public override int GetHashCode() { ... }
}

et un CustomClass qui implémente également IEquatable

public class CustomClass : IEquatable<CustomClass>
{
        public string stringone { get; set; }
        public string stringtwo { get; set; }

        public override bool Equals(object obj) { ... }
        public bool Equals(CustomClass other) { ... }
        public static bool operator ==(CustomClass cc1, CustomClass cc2) { ... }
        public static bool operator !=(CustomClass cc1, CustomClass cc2) { ... }
        public override int GetHashCode() { ... }
}

Tout cela fonctionne bien, ainsi, par exemple, les ouvrages suivants

IEnumerable<CustomClass> customclassone = new List<CustomClass>
    {
        new CustomClass { stringone = "hi" },
        new CustomClass { stringone = "lo" }
    };
IEnumerable<CustomClass> customclasstwo = new List<CustomClass>
    {
        new CustomClass { stringone = "hi" }
    };

var diff = customclassone.Except(customclasstwo);

ContainerClass containerclassone = new ContainerClass 
{
    CustomClass = customclassone.AsEnumerable()
};
ContainerClass containerclasstwo = new ContainerClass 
{
    CustomClass = customclasstwo.AsEnumerable()
};

var diff2 = containerclassone.CustomClass.Except(customclasstwo.CustomClass);

Après ce code à la fois diff et diff2 quand énumérés contiennent les résultats attendus. Cependant, si je puis essayer

IEnumerable<CustomClass> oldCustom = oldContainerClass.CustomClass;
IEnumerable<CustomClass> newcustom = newContainerClass.CustomClass;
var exceptlist = oldCustom.Except(newcustom);

Lorsque j'essaie d'énumérer les exceptlist-je obtenir "Au moins un objet doit implémenter IComparable.". La seule différence entre oldCustom et newCustom de la ci-dessus des exemples est la façon dont ils sont remplis. Quelqu'un a une idée de pourquoi ce qui se passe?

Si vous n'avez pas l'esprit, j'ai condensé un peu le code, afin de ne pas avoir à faire beaucoup de défilement pour lire.
Pourriez-vous nous fournir le code pour oldContatinerClass et newContatinerCalss ?
Pouvez-vous produire une courte mais complète du programme qui illustre le problème? Je ne vois pas pourquoi ce serait se passer de tout le code que vous avez indiqué. (Vous ne devriez pas besoin de l' == et != les opérateurs afin de le démontrer.)

OriginalL'auteur Manatherin | 2011-01-14