我尝试编译并计算LambdaExpression,如:
加号(10,加号(1,2))
但结果是4,而不是13。
代码:
using System;
using System.Linq.Expressions;
namespace CheckLambdaExpressionBug
{
class Program
{
static void Main(string[] _args)
{
ParameterExpression p1 = Expression.Parameter(typeof (int), "p1");
ParameterExpression p2 = Expression.Parameter(typeof (int), "p2");
LambdaExpression lambda = Expression.Lambda(Expression.Call(typeof(Program).GetMethod("Plus"), p1, p2), p1, p2);
InvocationExpression exp1 = Expression.Invoke(
lambda,
Expression.Constant(1),
Expression.Constant(2)
);
InvocationExpression exp2 = Expression.Invoke(
lambda,
Expression.Constant(10),
exp1
);
var func = (Func<int>) Expression.Lambda(exp2).Compile();
int v = func();
Console.Out.WriteLine("Result = {0}", v);
}
public static int Plus(int a, int b)
{
return a + b;
}
}
}
答案 0 :(得分:1)
因为似乎没有人发布这个:
它看起来是.NET 3.5中的一个错误,并在.NET 4中得到修复。
答案 1 :(得分:0)
虽然这似乎也在3.5中产生13:
var plus = new Func<int, int, int>((a, b) => a + b);
var func = new Func<int>(() => plus(10, plus(1, 2)));
var res = func();
Console.WriteLine(res);
答案 2 :(得分:0)
也许我需要将结果分配给本地var 试试这个
var plus = new Func((a,b)=&gt; a + b); var puls_1 = plus(1,2); var func = new Func(()=&gt; plus(10,plus_1)); var res = func(); Console.WriteLine(RES);