编译lambda表达式会导致委托使用闭包参数当我使用Expression.Lambda(...).Compile()从表达式树创建委托时,结果是一个委托,它的第一个参数是一个闭包。publicstaticFuncCreateTest(){ParameterExpressiona=Expression.Parameter(typeof(T));ParameterExpressionb=Expression.Parameter(typeof(T));表达式加法=Expression.Add(a,b);return(Func)Expression.Lambda(addition,a,b).Compile();}...//'addition'等于//Int32lambda_method(//System.Runtime.CompilerServices.Closure,//Int32,//Int32)Funcaddition=DelegateHelper.CreateTest();int结果=加法(5,5);我可以很容易地通过普通代码调用委托而无需传递Closure对象,但是这个Closure是从哪里来的呢?如何动态调用这个委托?//以下不起作用。//异常:MethodInfo必须是运行时MethodInfo对象。MethodInfoadditionMethod=addition.Method;intresult=(int)additionMethod.Invoke(null,newobject[]{5,5});使用表达式树,看起来我必须传递Closure对象。PropertyInfomethodProperty=typeof(Delegate).GetProperty("方法",typeof(MethodInfo));MemberExpressiongetDelegateMethod=Expression.Property(Expression.Constant(addition),methodProperty);FuncgetMethodInfo=(Func)Expression.Lambda(getDelegate)编译();//为调用方法提供的参数数量不正确//'Int32lambda_method(System.Runtime.CompilerServices.Closure,Int32,Int32)'Expressioncall=Expression.Call(getMethodInfo(),Expression.Constant(5),Expression.常量(5));这是一个简单的例子,本身没有意义。我真正想要实现的是能够用Func
