Convertir un groupe de méthodes en expression
-
05-07-2019 - |
Question
J'essaie de savoir s'il existe une syntaxe simple pour convertir un groupe de méthodes en une expression. Cela semble assez facile avec les lambdas, mais cela ne se traduit pas par des méthodes:
Étant donné
public delegate int FuncIntInt(int x);
tous les éléments ci-dessous sont valides:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Mais si j'essaie la même chose avec une méthode d'instance, elle se décompose au niveau des expressions:
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
La compilation des deux derniers échoue avec & "Impossible de convertir le groupe de méthodes" AFuncIntInt "en type non délégué" System.Linq.Expressions.Expression < ... > '. Aviez-vous l'intention d'invoquer la méthode? & Quot;
Y a-t-il une bonne syntaxe pour capturer une méthode grou dans une expression?
merci, arne
La solution
Comment ça?
Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Autres conseils
Il est également possible de le faire en utilisant NJection.LambdaConverter , un convertisseur Délégué à LambdaExpression, bibliothèque
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)
}
}