2017-07-03 4 views
2

Ich spiele mit der Generation von Roslyn und es funktioniert gut, außer wenn es nicht tut. Zum Beispiel möchte ich C# 7.0 Feature throw expression verwenden. Aber ich sehe keine entsprechende Methode in SyntaxFactory.Roslyn erstellen benutzerdefinierten Ausdruck

Ist es jetzt möglich, etwas wie var foo = bar ?? throw new Exception(); zu generieren? Weil NullCoalesceExpression ExpressionSyntax erwartet, während ThrowStatement offensichtlich eine Aussage ist.

Ich habe versucht, es von Grund auf neu zu bauen (das ist, was ich meine unter custom expression), aber ich bekomme nur mehrere Ausnahmen Unexpected SyntaxKind.

Antwort

4

Ich denke, es macht nicht viel Sinn, mit Roslyn "benutzerdefinierte Ausdrücke" zu erstellen. Roslyn ist der C# -Compiler, also muss es immer genau die C# -Syntax darstellen.

Wenn Sie einen Syntaxknoten aus einer Zeichenfolge erstellen möchten, haben Sie einige Optionen in Form von SyntaxFactory.Parse* Methoden. In Ihrem Fall wäre es SyntaxFactory.ParseExpression.

Wie für throw Ausdrücke haben sie natürlich ihre eigene SyntaxFactory Methode: SyntaxFactory.ThrowExpression. Stellen Sie nur sicher, dass Sie eine aktuelle Version von Microsoft.CodeAnalysis.CSharp (mindestens 2.0.0) verwenden.

Wenn Sie auch wissen möchten, wie man bestimmten Code mit der Roslyn API erstellt, kann Roslyn Quoter sehr nützlich sein.

+0

Vielen Dank für eine Antwort, aber dieses 'quoter' ist einfach genial. Mir war nicht bewusst, dass etwas Ähnliches überhaupt existieren kann! Es ist wirklich eine Handvoll. Warten auf einen neuen Tag, um all diese Sachen auszuprobieren. –

Verwandte Themen