gpt4 book ai didi

c# - 从字符串创建 BlockSyntax (Roslyn)

转载 作者:行者123 更新时间:2023-11-30 14:23:26 24 4
gpt4 key购买 nike

我有一些带有源代码的字符串,例如

var newSource = @"
int a = 5;
int b = 10;
Console.WriteLine(a + b);";

我尝试用解析后的代码创建 BlockSyntax 对象

var newTokens = SyntaxFactory.ParseTokens(newSource);
var newBody = SyntaxFactory.Block();
newBody = newBody.InsertTokensAfter(
newBody.OpenBraceToken, // or newBody.ChildTokens().First()
newTokens
);

但是方法 InsertTokenAfter 抛出 System.InvalidOperationException '指定的项目不是列表的元素。'

据我了解,该方法在 ChildTokens() 中找不到 token ,但为什么会这样?

.NET 核心 1.0.4

最佳答案

InsertTokensAfter 方法不适用于添加语句。它只允许您在现有的标记列表中插入标记(这是 C# 语法树中仅在声明的修饰符列表中出现的特定构造)。

语句是节点。您可以使用 InsertNodesAfter 在语句列表中插入一个或多个节点,但是您必须在列表中已经有一个现有的语句节点才能执行此操作,并且在您的示例中,您有一个空 block ,其中还没有任何语句。

如果您有一个语句列表,您可以使用 block.WithStatements() 方法,直接将一个语句列表传递给它。不幸的是,没有 SyntaxFactory.ParseStatementList 方法。

然而,有一个 SyntaxFactory.ParseStatement 方法,但它只解析一个语句。幸运的是, block 是一个语句。因此,您只需在语句的源代码周围添加一对大括号,并将其作为一个 block 进行解析。

var block = (BlockSyntax)SyntaxFactory.ParseStatement("{" + newSource + "}");

关于c# - 从字符串创建 BlockSyntax (Roslyn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com