Вы оборачиваете лямбду в лямбду ... это не то, что вы хотите.Попробуйте это:
class Program
{
static void Main(string[] args)
{
Expression<Func<int, int>> expr = i => i + 1;
var result = expr.Compile().Invoke(1);
Console.WriteLine(result);
}
}
Если вы хотите использовать "сквозной" TestMethod, вы можете сделать это:
class Program
{
static Expression TestMethod(Expression<Func<int, int>> expression)
{
return expression;
}
static void Main(string[] args)
{
var expr = TestMethod(i => i + 1);
var result = ((Expression<Func<int, int>>)expr).Compile().Invoke(1);
Console.WriteLine(result);
}
}
Или если вы хотите перестроить лямбду из неуниверсальноговыражение:
class Program
{
static LambdaExpression TestMethod(Expression<Func<int, int>> expression)
{
return expression;
}
static void Main(string[] args)
{
var expr = TestMethod(i => i + 1);
var result = Expression.Lambda<Func<int, int>>(expr.Body, expr.Parameters).Compile().Invoke(1);
Console.WriteLine(result);
}
}