Roslyn 中的 "GlobalStatementSyntax" 语法节点类型是什么

What is the "GlobalStatementSyntax" syntax node type in Roslyn

我正在调查在 Roslyn 中实现 MemberDeclarationSyntax 的语法节点的 classes,并遇到了 GlobalStatementSyntax class。 什么样的代码生成具有 GlobalStatementSyntax 个节点的语法树?为什么 GlobalStatementSyntax 是从 MemberDeclarationSyntax 派生出来的?这样的节点可以代表一个类型的成员吗?

两分钟的实验证实,如果您使用新的 Top-level statements 功能,您会得到这些。也就是说,如果您的整个程序是:

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()