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

¿Fue útil?

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)
    } 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top