我正在使用 Roslyn 来从另一个树生成一棵树。所以我们正在处理 AST 转换。我正在使用 SyntaxFactory 来生成节点。

在特定情况下,我想创建一个 u using 指令,它应该如下所示:

using MyNamespace.SubNamespace;

所以我这样做:
var usingDirective = SyntaxFactory.UsingDirective(SyntaxFactory.ParseName("MyNamespace.SubNamespace"));
var newNode = mynode.AddUsings(new[] { usingDirective });

但是,如果我检查生成的最终树 newNode (通过简单调用 newNode.ToString() 生成的字符串源代码),我看到我的指令已添加如下:
usingMyNamespace.SubNamespace;

如果我只是这样做,我可以看到同样的事情: usingDirective.ToString() 。看起来很错误,需要一个空格,这应该会触发语法错误。到底是怎么回事?

最佳答案

添加此以解决问题:

SyntaxFactory.UsingDirective(
    SyntaxFactory.ParseName("MyNamespace.SubNamespace")).NormalizeWhitespace();

关于c# - 在 Rosslyn 从工厂创建 Using 指令时生成错误的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40832090/

10-12 12:49
查看更多