为什么这些方法的圈复杂度如此之高?

Pio*_*rak 6 c# code-metrics visual-studio-2012

使用Visual Studio计算度量标准.

第一种方法有CC = 4

    private IEnumerable<string> GetRows(DataTable dt, string columnDelimiter)
    {
        return from DataRow row in dt.Rows
               select string.Join(columnDelimiter, row.ItemArray.Select(k => k.ToString()));
    }
Run Code Online (Sandbox Code Playgroud)

第二种方法有CC = 5.

    private IEnumerable<string> GetRowsForeach(DataTable dt, string columnDelimiter)
    {
        var rows = new List<string>();
        foreach (DataRow row in dt.Rows)
        {
            var rowString = string.Join(columnDelimiter, row.ItemArray.Select(k => k.ToString()));
            rows.Add(rowString);
        }

        return rows;
    }
Run Code Online (Sandbox Code Playgroud)

我会说第一种方法应该有CC = 1而第二种方法可能是CC = 1或者可能是2(了解最终条件的情况.但我永远不会说他们的CC是如此之高.我有什么误解?

Han*_*ant 4

这是一个不完美的工具。它看到 IL,即由 C# 编译器生成的代码。它看不到您的代码。C# 中有大量语法糖,旨在使代码易于理解,但代码生成的冰山在水线以下。查询理解当然符合这种模式。

仅将 CC 用作指导,切勿让它设定规则,也绝不让它限制您的风格。你的大脑胜过任何工具。