Гарантируется ли == работа при сравнении объектов, загруженных из NHibernate? - PullRequest
2 голосов
/ 24 августа 2011

Вот что мы знаем: NHibernate рекомендует переопределить Equals () и GetHashCode (). Microsoft рекомендует НЕ переопределять оператор == в неизменяемых типах. Следовательно, кажется, что клиентский код не должен использовать operator == для сравнения объектов. Например, если Foo корректно перегружает GetHashCode () и Equals, тогда:

var foo1 = session.Get<Foo>(23);

 ...

var foo2 = session.Get<Foo>(23);

Assert.IsTrue( foo1 == foo2 );  // May fail!
Assert.IsTrue( foo1.Equals(foo2)); // Guaranteed!

Это правильное суммирование?

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Сеанс Hibernate гарантирует, что оба вызова get в вашем примере кода на самом деле будут возвращать один и тот же экземпляр объекта.

Так что в случае постоянных объектов гибернации, принадлежащих одному и тому же сеансу,== оператор будет работать надежно.

0 голосов
/ 24 августа 2011

Оператор равенства == выполнит сравнение равенства ссылок.Например, ссылка foo1 равна ссылке foo2.

0 голосов
/ 24 августа 2011

Я считаю, что ваше суммирование правильное.Equals () - это сравнение на равенство.С простым типом, таким как строка или int ==, гарантированно будет работать, но с объектом, я думаю, вам лучше использовать Equals ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...