我有以下代码片段,用于检查特定DataRow是否具有特定名称的列以及它是否为NULL。
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;
}
}
Visual Studio将此显示为具有环路复杂性。有没有办法减少这个函数的圈数指数。
答案 0 :(得分:1)
只需返回链接的AND语句,就可以减少 tad 的圈复杂度:
private static bool HasValue(DataColumn c, DataRow row)
{
return c != null && row != null && row[c.ColumnName] != DBNull.Value;
}
答案 1 :(得分:1)
您可以执行以下操作,而不是循环遍历row.Table.Columns
以查明表是否包含列:
var column = row.Table.Columns[Constants.Literals.ACTIVATIONDATETIME];
if(HasValue(column, row))
{
//column found.
}
这消除了循环并在其中切换,并显着降低了函数的圈复杂度。