ReSharper以错误的方式检测"Expression is always true"



ReSharper似乎以一种非常简单(太简单(的方式解决了这种情况:

public ActionResult Payment()
{
IOrder order = PaymentBase.GetOrderFromRequest(this.Request.Params); //this method can return null sometimes
int payForm = order.PayForm;
if (order != null)
PaymentService.Check(order, "push", payForm);
else
LogsService.SaveDataLog(WebShopLogType.PaymentInfo, "order missing on push", (object)this.Request.Params.ToString(), "p");
return new EmptyResult();
}

我的空检查order != null标有"表达式始终为真"消息,因此我的整个else语句被视为不必要的。

我发现这个假设是基于order.PayForm.ReSharper 假设调用PayForm对象的属性order意味着它肯定不为空。删除此行将消除"表达式始终为真">消息。

它显然应该用"可能的空">消息标记int payForm = order.PayForm;行。

是错误还是我错过了什么?

这里没有错,表达式总是为真,因为如果 order == null,则 NullReferenceException 将在以下位置之前抛出一行:

int payForm = order.PayForm;

因此,如果没有引发异常,则订单对象不为 null

相关内容

最新更新