【发布时间】:2011-01-14 00:22:19
【问题描述】:
所以我有一个delegate,它指向一些我在第一次创建delegate 对象时实际上并不知道的函数。该对象稍后会设置为某个函数。
然后我还想创建一个表达式树,它使用参数调用委托(为了这个问题,参数可以是5)。这是我正在努力解决的问题;下面的代码显示了我想要的,但它没有编译。
Func<int, int> func = null;
Expression expr = Expression.Invoke(func, Expression.Constant(5));
对于这个例子我可以做(这很实用,因为我需要在运行时构建表达式树):
Func<int, int> func = null;
Expression<Func<int>> expr = () => func(5);
这使得expr 变成:
() => Invoke(value(Test.Program+<>c__DisplayClass0).func, 5)
这似乎意味着要使用delegate func,我需要生成value(Test.Program+<>c__DisplayClass0).func 位。
那么,如何创建一个调用委托的表达式树?
【问题讨论】:
-
Linq in Action 有一个关于表达式树的详细部分。
标签: c# .net lambda delegates expression-trees