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()
我正在调查在 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()