C# 在处理数据行时降低圈复杂度
我有下面的一段代码,它检查一个特定的DataRow是否有一个特定名称的列,以及它是否为NULLC# 在处理数据行时降低圈复杂度,c#,cyclomatic-complexity,C#,Cyclomatic Complexity,我有下面的一段代码,它检查一个特定的DataRow是否有一个特定名称的列,以及它是否为NULL private static bool HasValue(DataColumn c, DataRow row) { if (c != null && row != null && row[c.ColumnName] != System.DBNull.Value) { return true; } return f
private static bool HasValue(DataColumn c, DataRow row)
{
if (c != null && row != null && row[c.ColumnName] != System.DBNull.Value)
{
return true;
}
return false;
}
此外,我正在处理数据行的列并将其解析为相应的数据类型
foreach (DataColumn c in row.Table.Columns)
{
switch (c.ColumnName)
{
case Constants.Literals.ACTIVATIONDATETIME:
if (HasValue(c, row))
{
bFound = true; credentialInfo.ActivationDateTime = DateTimeOffset.Parse(Convert.ToString(row[c.ColumnName]));
}
break;
}
}
VisualStudio将其显示为循环复杂。是否有任何方法可以减少此函数的圈索引。只需返回链式语句和语句,即可稍微降低圈复杂度:
private static bool HasValue(DataColumn c, DataRow row)
{
return c != null && row != null && row[c.ColumnName] != DBNull.Value;
}
您可以执行以下操作,而不是通过
行.Table.Columns
循环查找表中是否包含列:
var column = row.Table.Columns[Constants.Literals.ACTIVATIONDATETIME];
if(HasValue(column, row))
{
//column found.
}
这消除了循环和其中的开关,并显著降低了函数的圈复杂度。删除所有这些,并使用适当的强类型数据模型。这样,就不需要检查stuff是否具有具有特定名称的特定其他stuff,因为您使用的是强类型的stuff,而不是严格类型的字典。