Konvertieren Methode Gruppe Expression
-
05-07-2019 - |
Frage
Ich versuche, aus Figur, wenn es eine einfache Syntax ist eine Methode Gruppe zu einem Ausdruck für die Umwandlung. Es scheint einfach genug mit Lambda-Ausdrücke, aber es übersetzt nicht auf Methoden:
Da
public delegate int FuncIntInt(int x);
alle die folgenden gelten:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Aber wenn ich das gleiche mit einer Instanzmethode versuchen, bricht es in den Ausdrücken unten:
Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt; //does not compile
Die beiden letzten beiden nicht mit kompilieren „Die Methode kann nicht Gruppe AFuncIntInt 'zu nicht-Delegattyp‚System.Linq.Expressions.Expression <...>‘konvertieren. Bitte benutzen Sie beabsichtigen, die Methode aufzurufen?“
So ist es eine gute Syntax für ein Verfahren Grou in einem Ausdruck erfassen?
Danke, arne
Lösung
Wie wäre das?
Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Andere Tipps
Es ist auch möglich, es zu tun mit NJection.LambdaConverter einen Delegierten Lambda Konverter Bibliothek
public class Program
{
private static void Main(string[] args) {
var lambda = Lambda.TransformMethodTo<Func<string, int>>()
.From(() => Parse)
.ToLambda();
}
public static int Parse(string value) {
return int.Parse(value)
}
}