c# - 试图理解为什么 ReSharper 告诉我表达式总是错误的

标签 c# asp.net resharper

我有一个正在编写的条件,它检查三件事。

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 可以为真的唯一方法是 LoggedInMembershipUserobj 中至少有一个为 null。第一个 if 永远不会到达 boolval 部分,除非两者都不为空。因此,在评估 boolVal 时,它必须为 false。

如果您对条件重新排序,那么该逻辑将不再成立。 ReSharper 可能会分析该表达式,确定所有部分都是快速且无副作用的,并注意 boolVal 在第二种情况下也不是必需的,但分析有点困难,显然还没有写.

关于c# - 试图理解为什么 ReSharper 告诉我表达式总是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14510338/

相关文章:

C#.NET 文件下载仅适用于 IE

javascript - 函数未在 Controller 内部定义,AngularJS

c# - 如何在将生产代码与测试代码分开的 Visual Studio 中执行 TDD

c# - 故意编写易受命令注入(inject)攻击的页面

c# - 在 C# 中将 CSV 数据填充到现有 Excel 模板

c# - 在页面编辑器中找不到 Sitecore 占位符键

resharper - VsVim:有没有办法关闭 ReSharper 智能感知并保持插入模式?

c# - 如何自动创建 WPF Viewmodel 属性

c# - 在 C# 中使用数组实例化 IEnumerable<IEnumerable<T>>

c# - 正在注册的类(class)上获取类(class)未注册 80041054