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

时间:2016-01-20 05:04:58

标签: c# .net equality

我正忙着调整我自己的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();

1 个答案:

答案 0 :(得分:1)

因为user.Id 可能会在AnyAsync将表达式转换为SQL之前更改。无法保证表达式是立即求值的,因此引用临时局部变量是有意义的。

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