Попробуйте что-то вроде этого:
Expression<Func<int, Expression<Func<int, int, int>>, Expression<Func<int>>>> power2 =
(o, f) => Expression.Lambda<Func<int>>(Expression.Invoke(
f, Expression.Constant(o), Expression.Constant(o)));
, а затем выражение будет:
var r = power2.Compile()(4, multiply);
//r = {() => Invoke((n1, n2) => (n1 * n2), 4, 4)}
, если вы хотите вызвать r
затем:
var r = power2.Compile()(4, multiply).Compile()();
//r is 16
nb Я изменил сигнатуру, чтобы она возвращала только Func<int>
, потому что фактический аргумент будет уже встроен во время компиляции.