Почему инициализация списка с помощью лямбды вызывает высокую цикломатическую сложность? - PullRequest
6 голосов
/ 26 октября 2010

Инициализация списка с лямбдами вызывает высокую цикломатическую сложность 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

1 Ответ

2 голосов
/ 26 октября 2010

Почему? Потому что ILCC определяется как количество различных пунктов перехода / перехода. Этот список, который вы инициализируете, содержит много логики if / then, содержащейся в лямбдах. Я полагаю, что языковой CC ниже?

Высокая цикломатическая сложность - это просто намек , что ваши функции слишком сложны, и, следовательно, их трудно понять, поддерживать и тестировать. Правильность этой подсказки в этом случае будет зависеть от того, как вы используете этот список предикатов. Но это только подсказка. Удержание CC на низком уровне не должно рассматриваться как закон природы. Если вы считаете, что код можно поддерживать и тестировать, отметьте высокий уровень ILCC в своей документации, объясните, почему он не имеет значения, и продолжайте.

...