c# - 使用 Nhibernate 时,检查 C# .Net 中的列表相等性不起作用

标签 c# .net nhibernate ilist

我似乎在检查列表相等性时遇到了问题。在我的例子中,我有两个角色对象,我想看看它们是否相等。每个角色都包含一个名称和一个权限列表。每个权限仅包含一个名称。

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 从数据库中加载的。这意味着角色实际上包含了实现 IList 接口(interface)的 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。事实上,我看不出为了确定两个列表不相等会发生什么。什么被执行?我什至无法进入那行代码。

这看起来应该有效,但实际上没有。有人对发生的事情有任何想法吗?

最佳答案

正如 Fredrik 所说,Equals 不比较列表的内容。但是 Enumerable.SequenceEqual 可以。 查看 Is there a built-in method to compare collections in C#?了解更多信息。

关于c# - 使用 Nhibernate 时,检查 C# .Net 中的列表相等性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401554/

相关文章:

c# - 无法使用 C# 将消息添加到存储队列

c# - 无法使 ActionLink 或 RouteLink 生成正确的 URL

c# - 在 Windows 计算机上的 .Net 中跨应用程序进行缓存

performance - NHibernate select指数增长缓慢

entity-framework - DevExpress XPO 与 NHibernate 与 Entity Framework : database upgrading issue

c# - 编程术语 - 字段、成员、属性 (C#)

c# - 如何以加密形式上传文件

c# - WPF,MVVM,导航,保持依赖注入(inject)不变

c# - .NET Compact Framework - 没有 ShowDialog 的模态表单

c# - NHibernate:防止刷新触发未初始化的集合