ReSharper 以错误的方式检测到“Expression is always true”

Prz*_*ław 0 .net c# resharper

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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

它显然应该int payForm = order.PayForm;“可能为空”消息来标记行。

这是一个错误还是我遗漏了什么?

Tal*_*Tal 6

这里没有错,表达式始终为真,因为如果 order == null,NullReferenceException 将在一行之前抛出,位于:

int payForm = order.PayForm;
Run Code Online (Sandbox Code Playgroud)

所以如果没有抛出异常,则订单对象不为空