Roslyn忽略子树
本文关键字:Roslyn | 更新日期: 2023-09-27 18:27:34
我正在尝试使用Roslyn,并通过扩展CSharpSyntaxWalker
和重写其Visit...
方法来实现我自己的节点访问者。但我有个问题。
考虑以下C#类:
class MyClass {
private void DoSomething() { ... }
public void DoSomethingElse() { ... }
public class MyClass2 {
private int GetSomething() { ... }
}
}
我只需要对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.Visit
。