6

使用 lambda 初始化列表会导致高 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 ….
};

注意:复杂度是用计算的NDepend

4

1 回答 1

2

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

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

于 2010-10-26T09:01:35.450 回答