Я пытаюсь написать пользовательское правило анализа кода FxCop, которое предупредит разработчиков о методах, содержащих слишком глубоко вложенные блоки кода, и побудит их реорганизовать беспорядок.
бывший. Я пытаюсь избежать следующей ситуации:
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
Почему существует такая циклическая ссылка? Как этого избежать? Спасибо!