gpt4 book ai didi

roslyn - SyntaxGenerator 和 SyntaxFactory 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 05:09:09 27 4
gpt4 key购买 nike

更具体地说: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

如果您通读 implementationsSyntaxGenerator 中,您会看到它们在底层使用 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");

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

关于roslyn - SyntaxGenerator 和 SyntaxFactory 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713904/

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