derlemek ve bu gibi LambdaExpression hesaplamak için çalışılmıştır:LambdaExpression'un iç içe geçtiği bir hata var mı?
artı (10, artı (1,2))
Ancak sonuç 13.
kodu, 4 değildir:
Bu iseusing 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;
}
}
}
VS2010 ile denedim: 13 – Henrik
hedeflediğiniz olursa = Sonuç .NET 3.5 (VS2010'da bile) sonra "Sonuç = 4" elde edersiniz; .NET 4'ü hedeflerseniz, "Sonuç = 13" elde edersiniz. – LukeH
Çok teşekkür ederim. Evet, .NET 3.5 kullanıyorum. – kitafan