罗斯林创建自定义表达式

Ale*_*kiy 2 .net c# code-generation roslyn c#-7.0

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

现在可以生成类似的东西var foo = bar ?? throw new Exception();吗?由于NullCoalesceExpression扩展ExpressionSyntax,而ThrowStatement显然是一个声明。

我试图从头开始构建它(这就是我的意思custom expression),但是我只有多个例外Unexpected SyntaxKind

svi*_*ick 5

我认为用Roslyn创建“自定义表达式”没有多大意义。Roslyn是C#编译器,因此始终必须准确表示所有C#语法。

话虽如此,如果您想从字符串创建语法节点,那么您确实可以使用SyntaxFactory.Parse*方法形式的一些选项。在您的情况下,它将为SyntaxFactory.ParseExpression

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

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