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中定义的方法做出反应。我可以获得该节点的引用。所以我可以得到一个代表MyClassSyntaxNode的引用,这样我就可以做:

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...
  }
}

我该怎么做?

Roslyn忽略子树

只是不要为不想递归到的节点调用base.Visit