'var' равен нулю хотя бы для одного пути выполнения - sonarqube или нет? - PullRequest
0 голосов
/ 22 мая 2019

, анализируя мой код с помощью sonarqube, я обнаружил 'variableProducerAgreements' is null on at least one execution path в следующем коде (цикл foreach):

однако, глядя на него и пробуя разные вещи, variableProducerAgreements кажется никогда не равным нулюв этом цикле foreach.во время проверки кода мне говорят, что он может быть «полностью» нулевым и должен добавить условную логику для его обработки.но я не понимаю, как это может быть нулевым и, следовательно, не уверен, как добавить условие.есть идеи?

1 Ответ

1 голос
/ 22 мая 2019

Я не вижу способа, которым variableProducerAgreements мог бы быть нулевым, так как у вас есть нулевая защита наверху (и при условии, что у вас нет сумасшедшего кода в получателях вашей собственности).

if (userProfile?.ProducerProfile == null)
    return result;

Методы Where и FindAll в .NET не возвращают ноль.

Однако возможно использование условного нуля каждый раз, когда вы обращаетесь к ProducerProfile, сбивает с толкунекоторые инструменты и люди.Поскольку вы возвращаетесь досрочно, если оно пустое, вы должны удалить их:

if (IsActingAsDelegate && userProfile.ProducerProfile.IsInactiveProducer)
{
    variableProducerAgreements = userProfile.ProducerProfile.ProducerAgreements.FindAll(ag => ag.IsActive && ag.IsVariableBranchContract);
}
else
{
    variableProducerAgreements = userProfile.ProducerProfile.ActiveAgreements.Where(a => a.IsVariableContract);
}

Если бы был способ обнулить его до оператора if, вы также рискнули бы NullReferenceException, когда выполучить доступ к свойству IsInactiveProducer.

Кроме того, рецензент должен иметь возможность объяснить свои аргументы.

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