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
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.)
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
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que vous avez essayé de trier les contenus de la
ContainerClass.CustomClass
. En raison de l'exécution différée, vous ne savez pas il y a un problème jusqu'à ce que vous itérer dessus etExcept()
est qu'un leurre.CustomClass
ne pas mettre en œuvre laIComparable
interface de sorte que le tri échoue avec l'erreur. VotreCustomClass
doit soit mettre en œuvre laIComparable<T>
interface ou vous devez passer dans unIComparer
sur votreOrderBy()
.par exemple,
Que cela pourrait aider à voir exactement ce que vous avez attribué à ces propriétés afin que nous puissions vous donner plus de précision la raison.
L'homme que je suis bête, votre droit à l'une de mes obtenez des codes de hachage pour une variable dans CustomClass essayait de orderby mais sans comparer
+1 pour le psychique de débogage.
OriginalL'auteur Jeff Mercado