我似乎在检查列表是否相等时遇到了问题。就我而言,我有两个角色对象,我想看看它们是否相等。每个角色都包含一个名称和一个权限列表。每个权限只包含一个名称。
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; }
}
我在 Role 和 Permission 对象上定义了一个 equals 方法。这些对象是使用 Nhibernate 从数据库中加载的。这意味着 Role 实际上包含实现 IList 接口的 NHibernate.Collection.PersistentBag 类型对象中的所有权限。
在 Role 类的 equals 方法中,我有一个条件如下:
if (!IList.Equals(Permissions, otherObj.Permissions)) return false;
这总是返回错误。即使列表中的权限包含具有相同名称且顺序相同的对象。如果我没有为 Permission 对象实现 equals 方法,这将是有意义的,但我有。
当我执行这样的语句时:
role1.equals(role2);
发生的情况是它首先进入 Role 对象的 equals 方法。好的。equals 方法检查角色的名称以查看它们是否相等。他们是。然后使用上面给出的代码检查权限是否相等。
我在 Permission 类的 equals 方法和 GetHashCode 方法中有一个断点。执行该语句时,不会调用权限类上的 equals 方法和 GetHashCode 方法,但它始终返回 false。实际上,我无法弄清楚会发生什么以确定两个列表不相等。什么被执行?我什至无法进入那行代码。
这似乎应该工作,但它没有。有人对发生的事情有任何想法吗?