如何解决如何重构这个方法来降低它的认知复杂度
我需要帮助,我正在尝试重构此方法以降低其认知复杂性 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;
}
解决方法
您可以重新设计 Page 类。
我不知道 num001 等是什么,指的是页面上的数字。是词索引吗? 字符数,具体字符? 或者完全是别的什么?
但不管它是什么:
public class Page {
public List<Num> numList
public Page()
{
NumList = InitializeNumList();
}
private List<Num> InitializeNumList()
{
NumList = new List<Num>{};
for(int i = 0; i < 20; i++)
{
NumList.add(new Num(i))
}
}
}
public class Num
{
public int Id {get;set;};
public string SomeString {get;set;}
public Num(int id)
{
Id = id;
SomeString = "";
}
}
,
如果您想减少代码行数并假设您的“页面”是一个仅具有这些属性的类 - 那么您可以使用某种反射来使用循环设置属性。
private static void PopulateBook(Book b)
{
var page = b.page;
PropertyInfo[] properties = typeof(page).GetProperties();
foreach(var prop in properties)
{
if(prop.GetValue(page) == null)
prop.SetValue(page,String.Empty);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。