c# - 如何在 C# 中的 for...if 循环中降低圈复杂度
问题描述
我有一个简单的代码来打印 CSV 文件的行和列。这是我的代码,这个类的圈复杂度是 6。我想将它降低到尽可能低。
class PrintCSV
{
/// <summary>
/// Print all the rows of CSV File
/// </summary>
/// <param name="lines"> </param>
public static void PrintCSVRows(string[] lines)
{
foreach (string line in lines)
{
if (!string.IsNullOrEmpty(line) && line.Contains(','))
{
string columns = line.Split(',')[1];
if (!string.IsNullOrEmpty(columns))
{
PrintCSVCol(columns);
}
}
}
}
/// <summary>
/// Prints the column of CSV File
/// </summary>
/// <param name="columns"></param>
public static void PrintCSVCol(string columns)
{
Console.WriteLine("{0}", columns);
}
}
如何更改循环以降低整体圈复杂度?
解决方案
如果您的目标只是降低圈复杂度,您可以提取如下方法:
/// <summary>
/// Print all the rows of CSV File
/// </summary>
/// <param name="lines"> </param>
public static void PrintCSVRows(string[] lines)
{
foreach (string line in lines)
{
PrintLine(line);
}
}
private static void PrintLine(string line)
{
if (IsValidLine(line))
{
string columns = line.Split(',')[1];
PrintCSVCol(columns);
}
}
private static bool IsValidLine(string line)
{
return !string.IsNullOrEmpty(line) && line.Contains(',');
}
/// <summary>
/// Prints the column of CSV File
/// </summary>
/// <param name="columns"></param>
public static void PrintCSVCol(string columns)
{
if (!string.IsNullOrEmpty(columns))
{
Console.WriteLine("{0}", columns);
}
}
根据 Visual Studio,使用此代码,每个方法的圈复杂度为 2。
然而,圈复杂度只是一个度量,并不一定意味着这个代码更好。
推荐阅读
- php - 将单词字符串转换为唯一数字
- rollupjs - rollup.js:如何禁用输出?
- php - Laravel Query Builder avg() 方法,浮点数问题
- twilio - Twilio Studio 在通话结束时发送并等待回复
- python - 如何将文件命令转换为打印语句?
- c# - 记录异常的正确方法 .Net 核心 MVC 应用程序
- python - pytest xdist 在执行具有多个进程的测试用例时崩溃
- java - 将列表中的类与普通字符串进行比较
- android - 按下 imageview 时更改所有背景的源图像
- javascript - 调用 redux-form 的 React 组件方法