Converter Método grupo para Expression
-
05-07-2019 - |
Pergunta
Eu estou tentando descobrir de se há uma sintaxe simples para a conversão de um grupo de método para uma expressão. Parece bastante fácil com lambdas, mas não se traduz em métodos:
Dada
public delegate int FuncIntInt(int x);
todos os abaixo são válidos:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Mas se eu tentar o mesmo com um método de instância, ele quebra as expressões:
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
Ambos os dois últimos não compilar com "Não é possível converter grupo de método 'AFuncIntInt' para tipo não-delegado 'System.Linq.Expressions.Expression <...>'. Você pretende invocar o método?"
Então, há uma boa sintaxe para a captura de um grou método em uma expressão?
graças, Arne
Solução
Como sobre isso?
Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Outras dicas
Também é possível fazê-lo usando NJection.LambdaConverter um delegado para LambdaExpression conversor Biblioteca
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)
}
}