使用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)
谢谢
你有三个条件 - 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
的值。从技术上讲,它会像你正在做的那样做,但它更容易让所有条件都基于这一个值。