为什么在我使用 LINQ 时 Class 耦合跳转?

Why does Class Coupling jump when I use LINQ?

我有一个采用三个参数的方法:List<Class1> sourceList<Class2) resultsDateTime endDate。我明白为什么 class 耦合是四个。但是,当我添加以下语句时它会跳转到 ten

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 );

我的问题:

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

另外六个 class 可能是:

  • IEnumerable<string> - 您的查询结果
  • IEnumerable<Class1>-左边collection
  • IEnumerable<Class2>-右边collection
  • Func<Class1, int> - 连接表达式的左边部分
  • Func<Class2, int> - 连接表达式的右边部分
  • Func<Class1, Class2, string> - 投影

它也可能计算 Enumerable class 因为查询被转换为静态扩展方法调用。

在任何一种情况下,代码分析似乎都没有忽略 Linq 使用的瞬态 classes(是否 应该 值得商榷)。我的建议是要么忽略它(也许手动计算耦合并注意差异)要么找到更好的分析工具。

另一个问题是:它会增加你的耦合度整体吗?我怀疑其中的几个 class 会在您的整个应用程序中使用,因此它可能不会对您的整体耦合产生重大影响。