ReSharper неправильно определяет «выражение всегда верно» - PullRequest
0 голосов
/ 11 февраля 2020

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; должно быть вместо сообщения «Возможно нулевое» .

Это ошибка или я что-то упустил?

1 Ответ

6 голосов
/ 11 февраля 2020

Здесь все в порядке, выражение всегда истинно, потому что если order == null, исключение NullReferenceException будет передано на строку раньше, по адресу:

int payForm = order.PayForm;

, поэтому, если исключение не выдается, объект order не нуль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...