0

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

考虑以下 C# 类:

class MyClass {
  private void DoSomething() { ... }
  public void DoSomethingElse() { ... }
  public class MyClass2 {
    private int GetSomething() { ... }
  }
}

我只需要对MyClass. 我可以获得对该节点的引用。所以我可以获得对SyntaxNode代表的引用MyClass,这样我就可以做到:

CSharpSyntaxWalker.Visit(node); // node is a SyntaxNode

但是,访问将对GetSomething方法做出反应,我想将其排除在访问之外。其实我想排除MyClass2. 因此,在我的自定义 walker 中,我可以覆盖访问方法以对方法做出反应,但是当我遇到类声明时,我想指示访问者忽略该节点。

public class MyWalker : CSharpSyntaxWalker {
  public override void VisitMethodDeclaration { ... }
  public override void VisitClassDeclaration {
    // Do something to exclude this node and its subtree from the visit...
  }
}

我怎样才能做到这一点?

4

1 回答 1

4

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

于 2015-12-20T22:47:16.427 回答