处理DataRows时降低Cyclomatic复杂性

时间:2014-12-26 09:00:54

标签: 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 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将此显示为具有环路复杂性。有没有办法减少这个函数的圈数指数。

2 个答案:

答案 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.
}

这消除了循环并在其中切换,并显着降低了函数的圈复杂度。