Как исправить SonarQube «переменная равна нулю хотя бы на одном пути выполнения»? - PullRequest
0 голосов
/ 26 апреля 2019

, используя sonarqube для анализа моего кода и получая сообщение "alloc" равен нулю как минимум на одном пути выполнения "для следующего кода

public RetirementAdvantageProgramSleeveAllocation(VariableDVAPolicy policy, Fund fund)
        : base(policy, fund)
    {
        SleeveAllocation alloc = null;
        if (fund.FundAccountType == FundAccountType.PortfolioChoice)
        {
            alloc = PortfolioChoiceAccountAllocation;
        }
        else if (fund.FundAccountType == FundAccountType.Heritage)
        {
            alloc = HeritageAccountAllocation;
        }
        else if (fund.FundAccountType == FundAccountType.RetirementProtection)
        {
            alloc = RetirementProtectionAccountAllocation;
        }
        alloc.PercentValue = fund.Value;
        alloc.PercentAllocation = fund.Value;
        alloc.Units = 0;
        alloc.Value = 0;
    }

alloc.PercentValue = fund.Value; где я получаю возможное исключение System.NullReferenceException, однако это ложный положительный результат? или мне действительно нужно обернуть все это в if (alloc == null)

спасибо

1 Ответ

0 голосов
/ 26 апреля 2019

У вас есть три условия - if и два else if.

Если какое-либо из этих условий выполнено, alloc назначается ссылка.

Но что, если ни одно из них не выполнено?Затем вы пытаетесь использовать alloc, но это ноль.

Вопрос в том, что должно произойти, если ни одно из этих условий не выполняется.Вы хотите создать исключение или назначить что-то еще для alloc?

Вы можете сделать это либо в финале else:

else
    // throw an exception or assign something else

, либо добавить в конце чек:

if (alloc == null) 
    // throw an exception or assign something else

Что выВыполнение также может быть лучше представлено в виде оператора switch, поскольку все три условия проверяют значение fund.FundAccountType.Технически это будет делать то же самое, что и вы, но это делает более очевидным, что все условия основаны на этом одном значении.

...