Кажется, у меня проблема с проверкой равенства списков. В моем случае у меня есть два ролевых объекта, и я хочу посмотреть, равны ли они. Каждая роль содержит имя и список разрешений. Каждое разрешение содержит только имя.
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; }
}
Я определил метод equals для объектов Role и Permission. Эти объекты загружаются из базы данных с использованием Nhibernate. Это означает, что роль фактически содержит все разрешения в объекте типа NHibernate.Collection.PersistentBag, который реализует интерфейс IList.
В методе equals класса Role у меня есть условие:
if (!IList.Equals(Permissions, otherObj.Permissions)) return false;
Это всегда возвращает ложь. Даже если разрешения в списке содержат объекты с одинаковыми именами в одинаковом порядке. Это имело бы смысл, если бы я не реализовал метод equals для объекта Permission, но у меня есть.
Когда я выполняю оператор, подобный этому:
role1.equals(role2);
Что происходит, так это то, что сначала он обращается к методу equal объекта Role. Хорошо. Метод equals проверяет имя роли, чтобы увидеть, равны ли они. Они есть. Затем проверяет, равны ли разрешения, используя приведенный выше код.
У меня есть точка останова в методе equals класса Permission, а также в методе GetHashCode. Когда этот оператор выполняется, ни метод equals, ни метод GetHashCode в классе разрешений не вызываются, но он всегда возвращает false. На самом деле, я не вижу, чтобы выяснить, что происходит, чтобы определить, что два списка не равны. Что исполняется? Я даже не могу войти в эту строку кода.
Кажется, это должно работать, но это не так. У кого-нибудь есть идеи о том, что происходит?