我会保持它很简单,
如何获取表达式树了拉姆达的?
或从查询表达式?
我会保持它很简单,
如何获取表达式树了拉姆达的?
或从查询表达式?
你必须将拉姆达为不同的类型:
// Gives you a delegate:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => x * 2;
这同样适用于方法的参数。 但是,一旦你分配这样的lambda表达式到Func<>
类型,你不能得到表达式树回来。
康拉德的答复是准确的。 您需要分配lambda表达式来Expression<Func<...>>
为了使编译器生成的表达式树。 如果你得到一个lambda作为一个Func<...>
Action<...>
或其他委托类型,你已经是一堆的IL指令。
如果你真的需要能够到IL-编译拉姆达转换回一个表达式树,你必须编译它(例如做卢茨Roeder的反射工具做什么)。 我建议有一个看塞西尔库,它提供了先进的IL操作支持,可以为您节省相当长的一段时间。
只是为了扩大康拉德的回答,并纠正皮埃尔,你仍然可以生成从IL-编译拉姆达的表达,但它并不十分优雅。 增强康拉德的例子:
// Gives you a lambda:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => f(x);