MST

星途 面试题库

面试题:C#中Roslyn编译器平台的基本语法树操作

在C#的Roslyn编译器平台中,如何获取一段C#代码字符串中的所有方法声明?请简述实现思路,并给出关键代码示例。
33.8万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree将C#代码字符串解析为语法树。
  2. 通过语法树获取根节点,然后遍历语法树节点。
  3. 在遍历过程中,筛选出类型为MethodDeclarationSyntax的节点,这些节点即为方法声明。

关键代码示例

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static List<MethodDeclarationSyntax> GetMethodDeclarations(string sourceCode)
    {
        var syntaxTree = CSharpSyntaxTree.ParseText(sourceCode);
        var root = syntaxTree.GetRoot();
        return root.DescendantNodes()
                   .OfType<MethodDeclarationSyntax>()
                   .ToList();
    }
}

你可以这样调用上述方法:

class Test
{
    static void Main()
    {
        string sourceCode = @"
            class MyClass
            {
                public void MyMethod1() { }
                private int MyMethod2(int a) { return a; }
            }
        ";
        var methods = GetMethodDeclarations(sourceCode);
        foreach (var method in methods)
        {
            Console.WriteLine(method.Identifier.Text);
        }
    }
}