Wil*_*iam 13 c# asp.net resharper
我有一个条件,我写的是检查三件事.
if(LoggedInMembershipUser == null || obj == null || boolVal)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"LoggedInMembershipUser"只是Membership.GetUser(),"obj"是一些随机业务对象,"boolVal"显然是一个布尔值.当我按上述方式编写语句时,resharper告诉我语句的boolVal部分始终为false.但是当我把boolVal放在startnig下面时,我没有注意到这一点.
if(boolVal|| LoggedInMembershipUser == null || obj == null)
Run Code Online (Sandbox Code Playgroud)
为什么第一个总是假的而第二个不是?
编辑:这是在网格视图的行数据绑定中.网格显示来自具有相同基类的两个对象的结果,因此如果"obj"是其中一个对象类型而不是另一个,则"obj"将具有值.boolVal是一个指示器,它是什么类型的对象现在,我想它,我想如果obj为null,那么boolVal将永远为真.resharper意识到了一些如何?哦,我打赌这是因为看到我的代码高于我的代码:
if (!uploaded){
var obj = GetObjectLogic();
}
Run Code Online (Sandbox Code Playgroud)
好的,感谢您的帮助评论.我想这可以被投票删除或其他什么.
Kev*_*art 16
没有更多的方法,很难确定,但它肯定看起来如下:
ReSharper已经确定唯一可行的方法boolVal是,如果至少有一个LoggedInMembershipUser或obj为null.除非两者都不为空,否则首先if不会到达该boolval部分.因此,在boolVal评估时,它必须是错误的.
如果重新排序条件,则该逻辑不再成立.ReSharper可以潜在地分析该表达式,确定所有部件都是快速且无副作用的,并且注意到boolVal在第二种情况下也不是必需的,但是分析有点困难并且显然没有写入.
| 归档时间: |
|
| 查看次数: |
4514 次 |
| 最近记录: |