我正在尝试编写自定义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
为什么存在这样的循环引用?怎么避免呢? 谢谢!
答案 0 :(得分:0)
SourceContext
的{{1}}属性中的起始行和结束行,并跟踪每个
我们发现'{'和'}'。增加'{'的计数器并递减'}'的计数器。这应该有用,对吗?