簡體   English   中英

Lambda到Expression樹的轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM