Я пытаюсь написать собственное правило анализа кода FxCop, которое будет предупреждать разработчиков о методах, содержащих слишком глубоко вложенные блоки кода, и будет призывать их перефакторизовать беспорядок.
ex.Я пытаюсь избежать следующей ситуации:
if(condition)
{
foreach(var item in items)
{
if(anotherCondition)
{
for(var product in item.Products)
{
// even more nested statement blocks...
}
}
}
}
Я получаю переполнение стека, когда переопределяю метод VisitBlock(Block block)
, который считает глубину блока, потому что, очевидно, существует циклическая ссылка изсвойств блока к самому блоку.т.е. для некоторых i верно следующее: block.Statements [i] == block
Почему существует такая циклическая ссылка?Как этого избежать?Спасибо!