使用FxCop Introspection进行代码分析的无限循环

我正在尝试编写自定义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 为什么存在这样的循环引用?怎么避免呢? 谢谢!     
已邀请:
经过一些研究,我发现我实际上有两个主要问题 VisitXXX方法不访问源代码的抽象语法树中的节点 但实际上访问生成的IL中的节点。只需比较每种方法生成的IL指令 和每个方法生成的语句。身体。 我想知道如果FxCop我们可以取得什么 可以为我们提供真正的AST访客吗? 回答我的初步问题,防止开发人员写太多嵌套 代码块,我们应该自己扫描方法代码,我的意思是,取出
method.Body
SourceContext
属性中的起始行和结束行,并跟踪每个 我们发现'{'和'}'。增加'{'的计数器并递减'}'的计数器。那应该有用,对吗?     

要回复问题请先登录注册