为什么使用lambda进行列表初始化会导致高的圈复杂度?

sth*_*ers 6 c# lambda ndepend cyclomatic-complexity

使用lambdas初始化列表会导致高IL圈复杂度:为什么以及如何消除这种复杂性?例如,下面的代码导致类的静态构造函数(实际上是编译器生成的)非常复杂:1 +列表计数.

static List<Predicate<string>> list = new List<Predicate<string>>()
{
    s => s == null,
    s=> s.StartsWith(“R”),
    ... With a lot of predicates like that ….
};
Run Code Online (Sandbox Code Playgroud)

注意:复杂度用计算 NDepend

Pon*_*gge 2

为什么?因为ILCC被定义为不同跳转/分支目的地的数量。您正在初始化的列表包含大量 if/then 逻辑,包含在 lambda 中。我认为依赖于语言的 CC 较低?

圈复杂度只是暗示您的函数过于复杂,因此难以理解、维护和测试。在这种情况下,该提示是否正确取决于您如何使用该谓词列表。但这只是一个暗示。保持低 CC 不应被视为自然法则。如果您认为代码是可维护和可测试的,请注意文档中的高 ILCC,解释为什么它不重要,然后继续。