ネストが深すぎるコードブロックを含むメソッドから開発者に警告し、混乱を再ファクタリングするように促すカスタムFxCopコード分析ルールを作成しようとしています。
元。私は次の状況を避けようとしています:
if(condition)
{
foreach(var item in items)
{
if(anotherCondition)
{
for(var product in item.Products)
{
// even more nested statement blocks...
}
}
}
}
VisitBlock(Block block)
ブロックの深さをカウントするメソッドをオーバーライドすると、スタックオーバーフローが発生します。
これは、ブロックのプロパティの1つからブロック自体への循環参照があるためです。つまり、一部のiには次のことが当てはまります。block.Statements[i]==ブロック
なぜそのような循環参照が存在するのですか?それを回避する方法は?ありがとう!