更具体地说:Microsoft.CodeAnalysis.Editing.SyntaxGeneratorMicrosoft.CodeAnalysis.CSharp.SyntaxFactory

1)我的理解是它们都是Roslyn的一部分,并且都用于生成代码,对吗?如果是,那该类别中还有其他人吗?

2)一个比另一个更好和/或更新吗?我只怀疑是因为发现了this

最佳答案

每个SyntaxFactory(对于VB来说一个,对于C#来说一个)与它的语言紧密相关。从某种意义上说,SyntaxFactory是一个“较低级别”的API,可用于创建语法树。使用SyntaxFactory时,您可以控制树中的每个语法节点,令牌和琐事。这是有代价的:由于它非常冗长,因此很难阅读和理解使用SyntaxFactory的源代码。

SyntaxGenerator提供了与语言无关的API,可用于创建C#或VB .NET语法。它提供了一个与SyntaxFactory相比更易于使用且更简洁的API。请注意,要创建SyntaxGenerator,我们需要Document, ProjectWorkspace

如果您通读SyntaxGeneratorimplementations,您会发现他们正在使用引擎盖下的SyntaxFactory

生成以下代码时,我们可以比较两个API:

void Method()
{
}


语法工厂

var method = SyntaxFactory.MethodDeclaration(
                    SyntaxFactory.PredefinedType(
                        SyntaxFactory.Token(SyntaxKind.VoidKeyword)),
                    SyntaxFactory.Identifier("Method"))
                .WithBody(
                    SyntaxFactory.Block()))))


语法生成器

SyntaxGenerator generator = SyntaxGenerator.GetGenerator(...); //We need a Document, Project or Workspace
var method = generator.MethodDeclaration("Method");


生成器只是构建语法树的一种更干净的方法。

07-26 05:33