Преобразование группы методов в выражение
-
05-07-2019 - |
Вопрос
Я пытаюсь выяснить, существует ли простой синтаксис для преобразования группы методов в выражение.С лямбда-выражениями это кажется достаточно простым, но это не переводится в методы:
Данный
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)
}
}