C# Roslyn将忽略子树
我试图使用Roslyn并通过扩展C# Roslyn将忽略子树,c#,syntax,roslyn,roslyn-code-analysis,C#,Syntax,Roslyn,Roslyn Code Analysis,我试图使用Roslyn并通过扩展CSharpSyntaxWalker并重写其Visit…方法来实现我自己的节点访问者。但我有个问题 考虑以下C类: 我只需要对MyClass中定义的方法作出反应。我可以得到该节点的引用。因此,我可以获得一个表示MyClass的SyntaxNode的引用,这样我就可以: CSharpSyntaxWalker.Visit(node); // node is a SyntaxNode 但是,访问将对GetSomething方法作出反应,我希望将其从访问中排除。实际上,
CSharpSyntaxWalker
并重写其Visit…
方法来实现我自己的节点访问者。但我有个问题
考虑以下C类:
我只需要对MyClass
中定义的方法作出反应。我可以得到该节点的引用。因此,我可以获得一个表示MyClass
的SyntaxNode
的引用,这样我就可以:
CSharpSyntaxWalker.Visit(node); // node is a SyntaxNode
但是,访问将对GetSomething
方法作出反应,我希望将其从访问中排除。实际上,我想排除MyClass2
。因此,在我的自定义walker中,我可以重写visit方法以对方法作出反应,但是当我遇到类声明时,我希望指示访问者忽略该节点
public class MyWalker : CSharpSyntaxWalker {
public override void VisitMethodDeclaration { ... }
public override void VisitClassDeclaration {
// Do something to exclude this node and its subtree from the visit...
}
}
我该怎么做呢?不要调用
base。对于不想递归的节点,请访问。不要调用base。对于不想递归的节点,请访问
public class MyWalker : CSharpSyntaxWalker {
public override void VisitMethodDeclaration { ... }
public override void VisitClassDeclaration {
// Do something to exclude this node and its subtree from the visit...
}
}