您必須將lambda分配給其他類型:
// 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編譯的lambda轉換回表達式樹,你必須對它進行反編譯(例如,做Lutz Roeder的Reflector工具)。我建議看一下Cecil庫,它提供高級的IL操作支持,可以為你節省很多時間。