删除此“ return”语句或使其成为有条件的

时间:2019-05-10 15:16:54

标签: c# sonarqube

我正在使用一个名为SonarQube的代码分析软件,它向我显示此错误消息,提示我应删除return语句或使其成为条件语句

我正在考虑隐瞒消息,但还不确定。

protected static SubAccount GetSubAccountByProductCode(Holding acordHolding, string productCode, string optionType)
{
    var OptionTypeElement = ACORDUtil.CreateACORDElement("OptionType");
    const string subAccountPrefix = "SubAccount";
    var OlifeExtensions = new List<XmlElement>();

    if (string.IsNullOrEmpty(optionType))
    {
        OptionTypeElement.InnerText = "V";
    }
    else
    {
        OptionTypeElement.InnerText = optionType;
    }
    OlifeExtensions.Add(OptionTypeElement);
    foreach (var acordSubAccount in acordHolding.Investment.SubAccount.Where(sa => sa.ProductCode.Equals(productCode)))
    {
        acordSubAccount.OLifEExtension.Add(ACORDUtil.CreateOLifEExtension(OlifeExtensions));
        return acordSubAccount;
    }

    //sub account not found, create one for this product symbol.
    var newSubAccount = new SubAccount();
    newSubAccount.id = string.Format("{0}-{1}", subAccountPrefix, productCode);
    newSubAccount.ProductCode = productCode;
    acordHolding.Investment.SubAccount.Add(newSubAccount);

    var oLifeExt = ACORDUtil.CreateOLifEExtension(OlifeExtensions);
    newSubAccount.OLifEExtension.Add(oLifeExt);
    return newSubAccount;
}

使声纳不抛出错误消息。

3 个答案:

答案 0 :(得分:3)

好吧,它只会发生在一件商品上,因此您可以使其更简单,更明显

var acordSubAccount = acordHolding.Investment.SubAccount.FirstOrDefault(
    sa => sa.ProductCode.Equals(productCode)); // possibly use == instead of .Equals?
if (acordSubAccount != null)
{
    acordSubAccount.OLifEExtension.Add(ACORDUtil.CreateOLifEExtension(OlifeExtensions));
    return acordSubAccount;
}

答案 1 :(得分:1)

这是因为您的return循环中有一个ForEach

它看起来像您期望一个项目完全匹配,因此也许将其更改为使用SingleOrDefault。这将只返回一个符合条件的元素,如果有多个匹配项,则抛出异常。

var acordSubAccount = acordHolding.Investment.SubAccount.SingleOrDefault(
    sa => sa.ProductCode.Equals(productCode));
if (acordSubAccount != null)
{
    acordSubAccount.OLifEExtension.Add(ACORDUtil.CreateOLifEExtension(OlifeExtensions));
    return acordSubAccount;
}

答案 2 :(得分:0)

猜测您提到的return语句是for循环中的一个:您要运行一个循环,该循环在每次迭代时无条件返回值,至少可以说是奇怪的,因为循环将被中断在第一次迭代时,返回第一个 acordSubAccount 并退出该方法。 您可能需要重新考虑该循环要完成的工作以及是否需要它。