当我使用LINQ时,为什么Class Coupling会跳转?

Kel*_*ine 6 c# linq code-metrics

我有三个参数的方法:List<Class1> source,List<Class2) results,和DateTime endDate.我可以看出为什么类耦合是四.但是,当我添加此语句时,它会跳到:

var warnings = from s in source
    join r in results on s.Field1 equals r.Field1 into joined
    from j in joined.DefaultIfEmpty( )
    where j == null
    select string.Format( "{0}{1}", A_CONSTANT, s.Field2 );
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. LINQ语句引入的六个新类是什么?
  2. 由于十是"好代码"的上限,这是否表明LINQ不是一个好选择?

D S*_*ley 5

另外六个类可能是:

  • IEnumerable<string> - 您的查询结果
  • IEnumerable<Class1> - 左边的集合
  • IEnumerable<Class2> - 正确的收藏
  • Func<Class1, int> - 连接表达式的左侧部分
  • Func<Class2, int> - 连接表达式的右侧部分
  • Func<Class1, Class2, string> - 投影

Enumerable由于查询被转换为静态扩展方法调用,因此它也可以计算类.

在任何一种情况下,代码分析似乎都不会忽略Linq使用的瞬态类(无论它是否应该是有争议的).我的建议是要么忽略它(可能手动计算耦合并注意差异)或找到更好的分析工具.

另一个问题是:它是否会增加你的整体耦合?我怀疑在您的应用程序中使用了其中几个类,因此它可能不会对您的整体耦合产生显着影响.