Ausführen LambdaExpression und get zurückgegebene Wert als Objekt
Ist es eine saubere Art und Weise, dies zu tun?
Expression<Func<int, string>> exTyped = i => "My int = " + i;
LambdaExpression lambda = exTyped;
//later on:
object input = 4;
object result = ExecuteLambdaSomeHow(lambda, input);
//result should be "My int = 4"
Diese sollten für die verschiedenen Arten.
- Warum nicht einfach
var func = new Func<int, string>(x => { return string.Format("My int = {0}", x); });
? - Ich nehme an, die Frage ist vereinfacht.
- Macht Sinn, sonst eine einfache
string.Format()
würde es tun 🙂 - Warum wollen Sie die späte Bindung verwenden (
DynamicInvoke
). Wenn es möglich ist, würde ich versuchen dieses zu vermeiden (weil Sie keine compile-Zeit überprüfen; es ist also sehr viel möglich, erhalten Sie Laufzeitfehler). - sehr guter Punkt! Ich aktualisiert meine Antwort entsprechend.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher... Sie brauchen nur zu kompilieren, lambda und dann aufrufen...
Styxxy bringt einen hervorragenden Punkt... Sie wäre besser gedient werden, indem der compiler die dir helfen. Hinweis: mit einer kompilierten Ausdruck, wie in den folgenden code-Eingabe und Ergebnis sind beide stark typisiert sind.
compiledLambda.Invoke(input);
vielleicht die bessere Wahl hier, wenn der genaue Typ ist bekannt als @Styxxy hingewiesen.Invoke
ist schneller alsDynamicInvoke
aufgrund zu weniger Reflexion geht, finden Sie unter stackoverflow.com/questions/12858340/...