36
A
回答
50
您必須將拉姆達分配給不同的類型:
// 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<>
類型,就不能得到表達式樹。
10
康拉德的回答是確切的。您需要將lambda表達式分配給Expression<Func<...>>
以便編譯器生成表達式樹。如果您得到的lambda爲Func<...>
,Action<...>
或其他委託類型,那麼您擁有的只是一堆IL指令。
如果您確實需要能夠將IL編譯的lambda轉換回表達式樹,則必須對其進行反編譯(例如,執行Lutz Roeder的Reflector工具)。我建議看看Cecil庫,它提供了先進的IL操作支持,可以爲您節省相當長的一段時間。
6
爲了擴大Konrad的答案並糾正Pierre,你仍然可以從IL編譯的lambda生成一個表達式,儘管它並不優雅。增加Konrad的例子:
// Gives you a lambda:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => f(x);
相關問題
- 1. 轉換lambda表達式表達式樹
- 2. 在深度轉換lambda表達式到表達樹
- 3. lambda表達式樹
- 4. lambda表達式轉換
- 5. Lambda表達式Java轉換
- 6. 轉換成Lambda表達式
- 7. 轉換SQL查詢到lambda表達式
- 8. 轉換LINQ查詢到lambda表達式
- 9. 轉換SQL到lambda表達式或LINQ
- 10. 轉換表達式樹
- 11. 表達式樹轉換
- 12. 轉換List.Contains到表達式樹
- 13. 「與語句體lambda表達式不能轉換爲表達式樹」
- 14. 帶聲明正文的lambda表達式無法轉換爲表達式樹
- 15. 如何將IQueryable表達式樹轉換爲Lambda
- 16. 需要幫助將lambda轉換爲表達式樹
- 17. 轉換LINQ到SQL表達式表達式樹
- 18. 轉換lambda表達式字符串
- 19. lambda表達式都被轉換爲BiConsumer
- 20. 將此LINQ轉換爲Lambda表達式?
- 21. 轉換陣列迭代lambda表達式
- 22. LINQ - 轉換爲Lambda表達式
- 23. 將sql轉換爲Lambda表達式
- 24. 將此LINQ表達式轉換爲Lambda
- 25. 在Dispatcher.Invoke轉換lambda表達式
- 26. 轉換查詢Lambda表達式
- 27. 將C#lambda表達式轉換爲VB
- 28. Linq查詢轉換爲lambda表達式?
- 29. 將LINQ轉換爲lambda表達式
- 30. c#FsCheck無法轉換lambda表達式
在第一種情況下,代表是比lambda更好的術語。兩者都是lambda表達式,一個隱式轉換爲匿名委託,另一個表達式樹。 – nawfal 2013-12-18 15:34:47
@nawfal *'f' *是一個代表。但是'x => x * 2'是一個lambda表達式(就像你自己記下的那樣)。你的評論意味着我說了一些不同的東西,但我確實沒有。 – 2013-12-18 15:59:03
你說第二個表達式給你一個表達式樹。類似的,第一個lambda表達式應該*給你一個委託*,而不是* lambda * - 這是你的第一個評論。不要挑剔,只是提及以便在將來幫助某人。 – nawfal 2013-12-18 16:02:06