【发布时间】:2015-09-14 19:49:54
【问题描述】:
我想在没有预先存在的语法节点的情况下使用 Roslyn API 生成语法节点。也就是说,我不能简单地对现有对象使用 WithXYZ() 方法来修改它,因为没有现有对象。
例如,我想生成一个 InvocationExpressionSyntax 对象。假设构造函数可用,我可以做类似的事情
var invoke = new InvocationExpressionSyntax(expression, arguments);
但InvocationExpressionSyntax 的构造函数似乎不公开。
http://www.philjhale.com/2012/10/getting-started-with-roslyn.html
这个博客建议我可以使用一个 API,例如
Syntax.InvocationExpression()
但我看不到 Syntax 指的是什么,而且我在 Roslyn API 中看不到任何类似的东西。
我确实找到了可以让我这样做的 Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory
var invoke = SyntaxFactory.InvocationExpression().WithExpression(expression);
这对我来说已经足够好了。还有Microsoft.CodeAnalysis.CSharp.SyntaxFactory 供任何想知道的人使用。
SyntaxFactory 是创建新语法节点的正确方法吗?
我找到 SyntaxFactory.InvocationExpression 的方法是查看 src/Compilers/VisualBasic/Portable 目录下 roslyn 源代码 (https://github.com/dotnet/roslyn) 中的 PublicAPI.txt 文件。否则,我看不到 SyntaxFactory 记录在哪里。
【问题讨论】: