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