相关疑难解决方法(0)

为什么在重写Equals方法时重写GetHashCode很重要?

鉴于以下课程

public class Foo
{
    public int FooId { get; set; }
    public string FooName { get; set; }

    public override bool Equals(object obj)
    {
        Foo fooItem = obj as Foo;

        if (fooItem == null) 
        {
           return false;
        }

        return fooItem.FooId == this.FooId;
    }

    public override int GetHashCode()
    {
        // Which is preferred?

        return base.GetHashCode();

        //return this.FooId.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经覆盖了该Equals方法,因为它Foo代表了Foos表的一行.哪个是覆盖的首选方法GetHashCode

覆盖为什么重要GetHashCode

c# overriding hashcode

1371
推荐指数
13
解决办法
35万
查看次数

NHibernate:重写Equals和GetHashCode的原因

使用NHibernate时,为什么在实体中应该覆盖Equals或GetHashCode?在哪些情况下这些原因有效?

可以在网上找到的一些原因:

  • 支持延迟加载.通过默认的Equals方法比较代理对象可能会导致意外错误.但这应该通过身份图来解决(而且在很多情况下确实如此),不应该吗?当使用单个会话中的实体时,即使不重写Equals/GetHashCode,一切也应该正常工作.是否有任何情况下身份地图不能发挥其作用?
  • 这对NHibernate集合很重要.在任何情况下,GetHashCode的默认实现是不够的(不包括Equals相关问题)?
  • 混合来自多个会话和分离实体的实体.这样做是个好主意吗?

还有其他原因吗?

.net nhibernate

16
推荐指数
2
解决办法
6347
查看次数

标签 统计

.net ×1

c# ×1

hashcode ×1

nhibernate ×1

overriding ×1