Вопрос

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

Данный

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<...>».Вы намеревались вызвать этот метод?»

Итак, существует ли хороший синтаксис для отражения группы методов в выражении?

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

Это было полезно?

Решение

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

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);

Другие советы

Это также можно сделать с помощью NJection.LambdaConverter Библиотека конвертера делегатов 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)
    } 
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top