Ich möchte dynamisch eine Expression
Baum in C# erstellen, die diesen Code darstellt:Expression.SwitchCase mit C# 7 Musterabgleich
switch (x)
{
case A1 cx: Handle(cx); break;
case A2 cx: Handle(cx); break;
}
Bisher habe ich so etwas wie dieses:
Expression.Switch(xParameterExpression,
Expression.SwitchCase(
method1CallExpression, /* test value expression - what to put here ?? */),
Expression.SwitchCase(
method2CallExpression, /* test value expression - what to put here ?? */));
ich konnte Verwenden Sie auch die Expression.TypeAs
, aber es scheint nicht zu funktionieren. Ich vermute, ich brauche einen Ausdruck ähnlich dem bedingten statt dem var cx = x as A1;
.
Ich realisiere, das sind neue C# 7.0-Funktionen, aber gefragt, ob alle neuen Sprachfunktionen zu Expressions hinzugefügt werden?
Könnten Sie bitte ein detaillierteres Codebeispiel angeben, das deutlicher zeigt, was Sie erreichen möchten? –
Mein Anwendungsfall besteht darin, eine dynamische Methode/einen kompilierten Delegaten zu erstellen, der die switch-Anweisungen enthält. Ich habe nicht viel weiter als das für ein Codebeispiel, aber es wird mir erlauben, eine grundlegende switch-Anweisung zur Laufzeit zu erstellen und auszuführen. – jamespconnor
Das 'System.Linq.Expressions'-Paket wurde seit November 2016 nicht aktualisiert, daher nehme ich an, dass es die neue C# 7.0-Sprachunterstützung nicht enthält! – jamespconnor