Roslyn 忽略子树

Roslyn to ignore subtrees

我正在尝试使用 Roslyn 并通过扩展 CSharpSyntaxWalker 并覆盖其 Visit... 方法来实现我自己的节点访问者。但是我有一个问题。

考虑以下 C# class:

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 中,我可以覆盖访问方法以对方法做出反应,但是当我遇到 class 声明时,我想指示访问者忽略该节点。

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