Roslyn 创建自定义表达式

Roslyn create custom expression

我正在玩 roslyn generation,它工作正常,除非它不工作。例如,我想使用 C# 7.0 功能 throw expression。但是我在SyntaxFactory中没有看到任何对应的方法。

现在是否可以生成类似 var foo = bar ?? throw new Exception(); 的内容?因为 NullCoalesceExpression expexts ExpressionSyntax,而 ThrowStatement 显然是一个语句。

我试图从头开始构建它(这就是我在 custom expression 下的意思),但我只收到多个异常 Unexpected SyntaxKind.

我认为用 Roslyn 创建 "custom expressions" 意义不大。 Roslyn 是 C# 编译器,因此它始终必须准确表示所有 C# 语法。

也就是说,如果您想从字符串创建语法节点,您确实有一些 SyntaxFactory.Parse* 方法形式的选项。在您的情况下,它将是 SyntaxFactory.ParseExpression.

至于throw的表达,当然有自己的SyntaxFactory方法:SyntaxFactory.ThrowExpression。只需确保您使用的是最新版本的 Microsoft.CodeAnalysis.CSharp(至少 2.0.0)。

此外,如果您想知道如何使用 Roslyn API 构建某些代码,Roslyn Quoter 会非常有用。