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

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

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

最佳答案

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

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

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

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

07-26 09:32