[英]Lambda to Expression tree conversion
我會保持簡單,
如何從lambda中獲取表達式樹?
或者從查詢表達式?
您必須將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操作支持,可以為你節省很多時間。
只是為了擴展Konrad的答案,並糾正皮埃爾,你仍然可以從IL編譯的lambda中生成一個Expression,盡管它並不是非常優雅。 增加康拉德的例子:
// Gives you a lambda:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => f(x);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.