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
中定义的方法做出反应。我可以获得对该节点的引用。所以我可以获得对代表 MyClass
的 SyntaxNode
的引用,这样我就可以:
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
。
我正在尝试使用 Roslyn 并通过扩展 CSharpSyntaxWalker
并覆盖其 Visit...
方法来实现我自己的节点访问者。但是我有一个问题。
考虑以下 C# class:
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 中,我可以覆盖访问方法以对方法做出反应,但是当我遇到 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
。