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 会非常有用。
我正在玩 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 会非常有用。