使用 CSharpSyntaxWalker 遍历语法树
CSharpSyntaxWalker
类是 Visitor 模式的开箱即用实现,我们可以用它来遍历我们的语法树。下面是一个简单的 Syntax Walker 示例,它收集所有具有名称的 struct
-s,以字母 A
开头:
public class StructCollector : CSharpSyntaxWalker
{
public StructCollector()
{
this.Structs = new List<StructDeclarationSyntax>();
}
public IList<StructDeclarationSyntax> Structs { get; }
public override void VisitStructDeclaration(StructDeclarationSyntax node)
{
if (node.Identifier.ToString().StartsWith("A"))
{
this.Structs.Add(node);
}
}
}
我们可以通过以下方式使用 SyntaxWalker:
var structCollector = new StructCollector();
structCollector.Visit(syntaxRoot); // Or any other syntax node
Console.WriteLine($"The number of structs that have a name starting with the letter 'A' is {structCollector.Structs.Count}");