我正在使用一个名为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;
}
使声纳不抛出错误消息。
答案 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 并退出该方法。 您可能需要重新考虑该循环要完成的工作以及是否需要它。