Преобразовать группу методов в выражение - PullRequest
8 голосов
/ 17 июня 2009

Я пытаюсь выяснить, существует ли простой синтаксис для преобразования группы методов в выражение. С лямбдами это кажется достаточно простым, но это не переводится в методы:

Учитывая

public delegate int FuncIntInt(int x);

все перечисленные ниже действительны:

Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;

Но если я попробую то же самое с методом экземпляра, он будет разбит на выражения:

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

Оба из последних двух не могут быть скомпилированы с «Невозможно преобразовать группу методов« AFuncIntInt »в тип без полномочий« System.Linq.Expressions.Expression <...> '. Вы намеревались вызвать метод? "

Так есть ли хороший синтаксис для захвата метода grou в выражении?

спасибо, Арне

Ответы [ 2 ]

8 голосов
/ 17 июня 2009

Как насчет этого?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
0 голосов
/ 21 декабря 2013

Это также можно сделать с помощью NJection.LambdaConverter a Делегат для преобразования 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)
    } 
}
...