我正在尝试编写一个自定义的 FxCop 代码分析规则,该规则将警告开发人员不要使用包含太深嵌套代码块的方法,并敦促他们重新考虑混乱。
前任。我试图避免以下情况:
if(condition)
{
foreach(var item in items)
{
if(anotherCondition)
{
for(var product in item.Products)
{
// even more nested statement blocks...
}
}
}
}
当我覆盖计算块深度的VisitBlock(Block block)
方法时,我得到一个stackoverflow
,因为显然,从块的一个属性到块本身存在一个循环引用。即以下对于某些 i 是正确的:block.Statements[i] == block
为什么会存在这样的循环引用?如何避免?谢谢!