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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top