Convertir grupo de métodos a expresión
-
05-07-2019 - |
Pregunta
Estoy tratando de averiguar si hay una sintaxis simple para convertir un grupo de métodos en una expresión. Parece bastante fácil con lambdas, pero no se traduce en métodos:
Dado
public delegate int FuncIntInt(int x);
todos los siguientes son válidos:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Pero si intento lo mismo con un método de instancia, se descompone en las Expresiones:
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
Las dos últimas fallan al compilar con " No se puede convertir el grupo de métodos 'AFuncIntInt' al tipo no delegado 'System.Linq.Expressions.Expression < ... > '. ¿Pretendía invocar el método? & Quot;
Entonces, ¿hay una buena sintaxis para capturar un grupo de métodos en una expresión?
gracias, arne
Solución
¿Qué tal esto?
Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Otros consejos
También es posible hacerlo usando NJection.LambdaConverter un delegado a la biblioteca del convertidor de LambdaExpression
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)
}
}