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