Ich versuche, eine benutzerdefinierte FxCop-Codeanalyseregel zu schreiben zu schreiben, die Entwickler vor Methoden warnt, die zu tief verschachtelte Codeblöcke enthalten, und sie auffordert, das Chaos zu beseitigen.
ex. Ich versuche, die folgende Situation zu vermeiden:
if(condition)
{
foreach(var item in items)
{
if(anotherCondition)
{
for(var product in item.Products)
{
// even more nested statement blocks...
}
}
}
}
Ich erhalte einen Stackoverflow, wenn ich die VisitBlock(Block block)
Methode
die die Tiefe des Blocks zählt, denn offenbar gibt es eine zyklische Referenz von einer der Eigenschaften des Blocks auf den Block selbst. d.h. für ein gewisses i ist folgendes wahr: block.Statements[i] == block
Warum gibt es einen solchen zyklischen Bezug? Wie kann man ihn vermeiden? Vielen Dank!