- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更具体地说:Microsoft.CodeAnalysis.Editing.SyntaxGenerator
和 Microsoft.CodeAnalysis.CSharp.SyntaxFactory
。
1) 我的理解是它们都是 Roslyn 的一部分,并且都用于生成代码,这是正确的吗?如果是,该类别中还有其他人吗?
2) 一个比另一个更好和/或更新吗?我只是怀疑,因为我发现了 this .
最佳答案
每个 SyntaxFactory
(一个用于 VB,一个用于 C#)都与其语言紧密耦合。从某种意义上说,SyntaxFactory
是一个“较低级别”的 API,您可以使用它来创建语法树。使用 SyntaxFactory
时,您可以控制树中的每个语法节点、标记和琐事。这是有代价的:使用 SyntaxFactory
的源代码更难阅读和理解,因为它非常冗长。
SyntaxGenerator
提供了一个与语言无关的 API,可用于创建 C# 或 VB .NET 语法片段。它提供了一个比 SyntaxFactory
更易于使用且更简洁的 API。请注意,要创建 SyntaxGenerator
,我们需要 Document、
Project
或 Workspace
。
如果您通读 implementations的 SyntaxGenerator
中,您会看到它们在底层使用 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/
更具体地说:Microsoft.CodeAnalysis.Editing.SyntaxGenerator 和 Microsoft.CodeAnalysis.CSharp.SyntaxFactory。
是否可以通过 Roslyn SyntaxGenerator 类(不是 SyntaxFactory)生成自动属性? 这个: var myProperty = generator.PropertyDecl
我是一名优秀的程序员,十分优秀!