使用 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}");