所以我有一个delegate指向我在第一次创建delegate对象时实际上并不知道的功能.稍后将该对象设置为某个功能.
然后我还想创建一个表达式树,用参数调用委托(为了这个问题,参数可以是5).这是我正在努力的一点点; 下面的代码显示了我想要的内容,但它没有编译.
Func<int, int> func = null;
Expression expr = Expression.Invoke(func, Expression.Constant(5));
Run Code Online (Sandbox Code Playgroud)
对于这个例子,我可以这样做(这是实用的,因为我需要在运行时构建表达式树):
Func<int, int> func = null;
Expression<Func<int>> expr = () => func(5);
Run Code Online (Sandbox Code Playgroud)
这使得expr成为:
() => Invoke(value(Test.Program+<>c__DisplayClass0).func, 5)
Run Code Online (Sandbox Code Playgroud)
这似乎意味着要使用delegate func,我需要产生value(Test.Program+<>c__DisplayClass0).func一点.
那么,我怎样才能创建一个调用委托的表达式树?