如何修复SonarQube“变量在至少一个执行路径上为空”?

问题描述 投票:0回答:1

使用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)

谢谢

c# sonarqube nullreferenceexception
1个回答
0
投票

你有三个条件 - if和两个else if

如果满足任何一个条件,则为alloc分配一个参考。

但如果没有一个满足呢?然后你试图使用alloc,但它是null。

问题是如果这些条件都不成立,会发生什么。你想抛出异常,或者你想为alloc分配其他东西吗?

你可以在最后的else中做到这一点:

else
    // throw an exception or assign something else

或者你可以在最后添加一张支票:

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

你所做的也可能更好地表现为switch声明,因为所有三个条件都在检查fund.FundAccountType的值。从技术上讲,它会像你正在做的那样做,但它更容易让所有条件都基于这一个值。

© www.soinside.com 2019 - 2024. All rights reserved.