2013-11-15 3 views
2

Делаю лямбда-выражение LINQ:оценить выражение LambdaExpression?

Expression<Func<double, double, double>> add = (x, y) => x + y; 

Но теперь, как бы я оцениваю его, скажем, найти 2 + 3?

+4

Вы действительно хотите представить это выражение Linq? Вы можете оценить 'Func ' just fine самостоятельно. –

ответ

5

Это должно работать для вас:

var sum = add.Compile()(2,3); 

Существует некоторый случай, ваш Expression не имеет общего типа, вы должны использовать DynamicInvoke, чтобы выполнить его, потому что Compile() затем возвращает Delegate:

someNonGenericExpression.Compile().DynamicInvoke(2,3); 
3

В общем, если вы просто хотите, чтобы оценили лямбда, не используйте Expression<T>, а просто используйте свою лямбда для определения Func<T> непосредственно:

Func<double, double, double> add = (x, y) => x + y; 
double result = add(42.2, 52.1); 

Если у вас есть Expression<T> уже по другим причинам, и необходимо оценить его, вы можете использовать Expression<T>.Compile, чтобы преобразовать его в качестве делегата:

Expression<Func<double, double, double>> add = (x, y) => x + y; 
var asDelegate = add.Compile(); 
double result = asDelegate(42.2, 52.1); 
0

Expression.Compile() будет скомпилировать выражение в функция/действие. Сделайте это, а затем вызовите метод.

Expression<Func<double, double, double>> add = (x, y) => x + y; 
Func<double, double, double> addFunc = add.Compile(); 
double result = addFunc(2, 3); 
Смежные вопросы