首页 > 解决方案 > Roslyn 中的“GlobalStatementSyntax”语法节点类型是什么

问题描述

MemberDeclarationSyntax我正在研究在 Roslyn 中实现并遇到类的语法节点GlobalStatementSyntax类。什么样的代码生成带有GlobalStatementSyntax节点的语法树?又为什么GlobalStatementSyntax来源于MemberDeclarationSyntax?这样的节点可以代表一个类型的成员吗?

标签: c#roslyn

解决方案


两分钟的实验证实,如果您使用新的顶级语句功能,您就会得到这些。也就是说,如果您的整个程序是:

Console.WriteLine(args.Count);

(没有class,没有void Main等)

然后Roslyn Quoter生成这个结构:

CompilationUnit()
.WithMembers(
    SingletonList<MemberDeclarationSyntax>(
        GlobalStatement(
            ExpressionStatement(
                InvocationExpression(
                    MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        IdentifierName("Console"),
                        IdentifierName("WriteLine")))
                .WithArgumentList(
                    ArgumentList(
                        SingletonSeparatedList<ArgumentSyntax>(
                            Argument(
                                MemberAccessExpression(
                                    SyntaxKind.SimpleMemberAccessExpression,
                                    IdentifierName("args"),
                                    IdentifierName("Count"))))))))))
.NormalizeWhitespace()

推荐阅读