évaluer un LambdaExpression?
-
21-12-2019 - |
Question
Je suis en train de faire une LINQ expression lambda:
Expression<Func<double, double, double>> add = (x, y) => x + y;
Mais maintenant, comment l'évaluer, dire de trouver 2+3?
La solution
Cela devrait fonctionner pour vous:
var sum = add.Compile()(2,3);
Il y a certains cas où votre Expression
n'ont pas de types génériques, vous devez utiliser DynamicInvoke
pour l'exécuter parce que le Compile()
puis sera de retour d'une Delegate
:
someNonGenericExpression.Compile().DynamicInvoke(2,3);
Autres conseils
En général, si vous voulez juste pour évaluer le lambda, ne pas utiliser de Expression<T>
, mais plutôt utiliser votre lambda pour définir un Func<T>
directement:
Func<double, double, double> add = (x, y) => x + y;
double result = add(42.2, 52.1);
Si vous avez un Expression<T>
déjà pour d'autres raisons, et la nécessité de l'évaluer, vous pouvez utiliser Expression<T>.Compile
pour le convertir en un délégué:
Expression<Func<double, double, double>> add = (x, y) => x + y;
var asDelegate = add.Compile();
double result = asDelegate(42.2, 52.1);
Expression.Compile()
compiler votre expression dans une fonction/action.Afin de faire cela, et puis appeler la méthode.
Expression<Func<double, double, double>> add = (x, y) => x + y;
Func<double, double, double> addFunc = add.Compile();
double result = addFunc(2, 3);