【发布时间】:2021-05-05 13:20:46
【问题描述】:
我需要帮助,我正在尝试重构此方法以降低其认知复杂性 sonarqube 显示这个问题
private void PopulateBook(Book b)
{
if (b.page.num001 == null) b.page.num001 = string.Empty;
if (b.page.num002 == null) b.page.num002 = string.Empty;
if (b.page.num003 == null) b.page.num003 = string.Empty;
if (b.page.num004 == null) b.page.num004 = string.Empty;
if (b.page.num005 == null) b.page.num005 = string.Empty;
if (b.page.num006 == null) b.page.num006 = string.Empty;
if (b.page.num007 == null) b.page.num007 = string.Empty;
if (b.page.num008 == null) b.page.num008 = string.Empty;
if (b.page.num009 == null) b.page.num009 = string.Empty;
if (b.page.num010 == null) b.page.num010 = string.Empty;
if (b.page.num011 == null) b.page.num011 = string.Empty;
if (b.page.num012 == null) b.page.num012 = string.Empty;
if (b.page.num013 == null) b.page.num013 = string.Empty;
if (b.page.num014 == null) b.page.num014 = string.Empty;
if (b.page.num015 == null) b.page.num015 = string.Empty;
if (b.page.num016 == null) b.page.num016 = string.Empty;
if (b.page.num017 == null) b.page.num017 = string.Empty;
if (b.page.num018 == null) b.page.num018 = string.Empty;
if (b.page.num019 == null) b.page.num019 = string.Empty;
if (b.page.num020 == null) b.page.num020 = string.Empty;
}
【问题讨论】:
-
什么是
b.page?我猜它有 20 个编号的字段?你能多介绍一点上下文吗? -
首先将所有这些字段/属性放入单个数组或列表中。然后你可以循环并做一行
if -
我认为你可以完全摆脱这段代码,毕竟。
-
使 pages/nums 可枚举可能是最好的解决方案。如果这是不可能的并且您的语言版本是 C# 8.0 或更高版本,您也可以考虑使用null-coalescing assignment operator
??=。例如。b.page.num001 ??= string.Empty;.
标签: c# asp.net .net c#-4.0 c#-3.0