我正在尝试使用 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...
}
}
我怎样才能做到这一点?