我有一个正在编写的条件,它检查三件事。
if(LoggedInMembershipUser == null || obj == null || boolVal)
在这种情况下,“LoggedInMembershipUser”只是 Membership.GetUser(),“obj”是一些随机业务对象,而“boolVal”显然是一个 bool 值。当我编写上述语句时,ReSharper 告诉我语句的 boolVal 部分始终为假。但是当我如下所示将 boolVal 放在开头时,我没有收到通知。
if(boolVal|| LoggedInMembershipUser == null || obj == null)
为什么第一个总是错误的而第二个却不是?
编辑:这是在 GridView 的行数据绑定(bind)中。网格显示来自具有相同基类的两个对象的结果,因此如果“obj”是其中一种对象类型而不是另一种对象类型,则它会有一个值。 boolVal 是它是哪种类型的对象的指示符,所以现在我想起来了,我想如果 obj 为 null 那么 boolVal 将永远为真。 ReSharper 是否意识到了这一点?哦,我敢打赌这是因为在我的行上方查看我的代码:
if (!uploaded){
var obj = GetObjectLogic();
}
好的,感谢您的帮助评论。我想这可以投票删除或其他什么。
最佳答案
如果没有更多的方法,很难确定,但它看起来确实像下面这样:
ReSharper 已确定 boolVal
可以为真的唯一方法是 LoggedInMembershipUser
或 obj
中至少有一个为 null。第一个 if
永远不会到达 boolval
部分,除非两者都不为空。因此,在评估 boolVal
时,它必须为 false。
如果您对条件重新排序,那么该逻辑将不再成立。 ReSharper 可能会分析该表达式,确定所有部分都是快速且无副作用的,并注意 boolVal
在第二种情况下也不是必需的,但分析有点困难,显然还没有写.
关于c# - 试图理解为什么 ReSharper 告诉我表达式总是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14510338/