为什么不直接在 Equals() 中使用对象属性

本文关键字:对象 属性 Equals 为什么不 | 更新日期: 2023-09-27 18:31:01

我正忙着调整我自己的 MS 程序集分支Microsoft.AspNet.Identity.EntityFramework以使用 NHibernate,我注意到大量的代码如下所示:

var userId = user.Id;
var roleId = role.Id;
return await _userRoles.AnyAsync(ur => ur.RoleId.Equals(roleId) && ur.UserId.Equals(userId)).WithCurrentCulture();

为什么不直接使用它?

return await _userRoles.AnyAsync(ur => ur.RoleId.Equals(role.Id) && ur.UserId.Equals(user.Id)).WithCurrentCulture();

为什么不直接在 Equals() 中使用对象属性

因为user.Id很可能AnyAsync将表达式转换为SQL之前发生变化。不能保证立即计算表达式,因此引用临时局部变量是有意义的。

例如,在与数据库建立连接之前不生成 SQL 可能是有意义的。