Vérification de la Liste de l'égalité en C# .Net ne fonctionne pas lors de l'utilisation de Nhibernate
Je semble avoir un problème avec la vérification de la liste de l'égalité. Dans mon cas, j'ai deux objets rôles et je veux voir si elles sont égales. Chaque rôle contient un nom et une Liste d'autorisations. Chaque autorisation contient juste un nom.
public class Role : BaseDomain
{
virtual public String Name { get; set; }
virtual public IList Permissions { get; set; }
}
public class Permission
{
virtual public String Name { get; set; }
}
J'ai défini une méthode equals sur le Rôle et les objets d'Autorisation. Ces objets sont chargés à partir de la base de données à l'aide de Nhibernate. Cela signifie que le Rôle contient en fait toutes les Autorisations dans un objet de type NHibernate.Collection.PersistentBag qui implémente l'interface IList.
Dans la méthode equals de la Rôle de la classe j'ai une condition comme suit:
if (!IList.Equals(Permissions, otherObj.Permissions)) return false;
C'est toujours retourner false. Même lorsque les Autorisations de la liste contiennent des objets avec des noms identiques dans une même commande. Ce ferait de sens si je ne l'avais pas mis en œuvre une méthode equals pour l'objet de l'Autorisation, mais je l'ai.
Lorsque j'exécute une instruction de ce genre:
role1.equals(role2);
Ce qui se passe, c'est qu'il va d'abord le Rôle de l'objet de la méthode equals. Bon. La méthode equals vérifie que le nom du rôle à voir si ils sont égaux. Ils sont. Puis vérifie si les Autorisations sont égaux, en utilisant le code donné ci-dessus.
J'ai un point d'arrêt dans la méthode equals de la classe Permission ainsi que la méthode GetHashCode. Lorsque cette instruction est exécutée, ni la méthode equals, ni la méthode GetHashCode la permission de classe est appelée, mais il renvoie toujours false. En fait, je ne peux pas vu pour comprendre ce qui se passe dans le but de déterminer que les deux listes ne sont pas égaux. Ce qui est exécuté? Je ne peux même pas dans cette ligne de code.
Cela semble comme il devrait fonctionner, mais il ne le fait pas. N'importe qui ont des idées sur ce qui se passe?
OriginalL'auteur | 2009-09-09
Vous devez vous connecter pour publier un commentaire.
Lorsque vous comparez des 2 listes les uns avec les autres, la méthode Equals ne sera PAS de comparer les éléments qui sont dans cette liste.
Il permettra de comparer les objets de la Liste avec les autres objets de la Liste.
Une Liste est un objet qui a sa propre "identité".
Ceci par exemple, ne sera jamais vrai:
La méthode Equals ne pas comparer le contenu de la liste, mais la liste elle-même.
Si vous voulez que ce comportement, je pense que vous aurez à mettre en place votre propre type de Liste.
L'interface IList ne pas définir une méthode Equals. La Liste de classe, cependant, ne avoir une méthode Equals, mais, c'est parce que chaque classe .NET hérite de l '"Objet", et la méthode Equals est défini dans l '"Objet" de la classe. Voir: msdn.microsoft.com/en-us/library/system.object.aspx
OriginalL'auteur Frederik Gheysels
Comme Fredrik dit
Equals
ne pas comparer le contenu de ces listes. MaisEnumerable.SequenceEqual
.Vérifier
Est-il intégré dans la méthode pour comparer des collections en C#? pour plus d'info.
OriginalL'auteur Piotr Czapla