c# - Roslyn 中的“GlobalStatementSyntax”语法节点类型是什么
问题描述
MemberDeclarationSyntax
我正在研究在 Roslyn 中实现并遇到类的语法节点GlobalStatementSyntax
类。什么样的代码生成带有GlobalStatementSyntax
节点的语法树?又为什么GlobalStatementSyntax
来源于MemberDeclarationSyntax
?这样的节点可以代表一个类型的成员吗?
解决方案
两分钟的实验证实,如果您使用新的顶级语句功能,您就会得到这些。也就是说,如果您的整个程序是:
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()
推荐阅读
- json - 如何将字符串转换为 json vb.net
- apache - 为 Apache Tomcat 7 构建 HTTP 安全标头过滤器
- android - Android camera2 createCaptureRequest 在获取 YUV_420_888 图像时返回所有黑色像素
- angular - Angular 中 MatDiaLog 的关闭按钮获取错误无法读取 null 的属性“关闭”
- elasticsearch - 过滤一组关键字中的关键字
- python - 创建一个包含子字典的字典作为新值,索引为键
- php - 无法使用 PDO 从数据库类中回显行,获取“ArgumentCountError”
- python - Python - 从字符串中删除所有标点符号,仅打印包含“i”且等于或长于五个字符的单词
- c# - 如果第二个数组的一个或多个值与第一个数组匹配,Linq C# 检查两个数组
- pyspark - Pyspark 写入 CSV 始终写为整数类型