使用 Roslyn 获取 public 个函数

Getting public functions using Roslyn

我有以下代码,我从文件中提取所有方法。

var tree = file.GetSyntaxTreeAsync().Result;
var methodDeclarations = tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().ToList();

如何才能只获得public个函数?

如果您正在寻找文件中标记为 public 的方法,您可以使用 MethodDeclarationSyntax 对象的修饰符 属性,如下所示:

        var publicMethods = root.DescendantNodes()
            .OfType<MethodDeclarationSyntax>()
            .Where(method =>
                method.Modifiers.Where(modifier =>
                    modifier.Kind() == SyntaxKind.PublicKeyword)
                .Any());

如果您对该文件中声明的 class 的所有 public 方法感兴趣,您需要听从@Slaks 的建议并使用语义模型,因为 public 在父 class 中声明的方法将不会仅使用语法分析显示。