C# 表達式樹的重要意義


linq就是表達式樹的最重要價值的體現

 

因為 可以通過 lambda表達式,直接轉換為 expression tree所以,通過linq 所構造 的連式lambda就可以構造任意復雜的算法數據結構

而對這個算法數據結構的,解析,和翻譯將可以幫助 實現 跨語言的算法 平移,比如 linq to sql這一類的應用,

 

可以把算法做為存儲結構固定下來,這樣我們可以把算法保存在Expression里面,比如存入數據庫,提取出來在不同的平台不同的語言都

可以使用,只要采取相應的解析翻譯算法就可以了

 

經過對它的一段時間學習,我了解到一個重要的容易混淆的地方

Expression 不是表達式樹,表達式樹的轉化主要是針對一句話或一句話之類的事情 所做的,對一句C# 轉換為一個樹結構數據

而Expression的所有派生類,和由它的表達方法所進行的編程不是表達式樹的編程,而是面向比C#更底一層的指令接口的編程,我猜測就是

面向IL 的編程因為C#編譯后 就成為IL代碼,當然現在可能更優化aot之類,可能將一部分編譯成二進制,更具性能,這方面具體我沒研究過

總之Expression 非常類型Emit Emit就是直接 使用IL指令進行編程,它的最主要用途就是編譯一個動態方法 ,恰好Expression 的主要作用

也是如此 ,可以把Expression編程看作是對Emit的一個簡單的基於oo的封裝,它們直接針對的更低層語言(IL)的接口,比如 Expression里面

沒有while,for foreach,等種種循環,就是一個Expression.Loop(...) 就完了,類似還有Block 這個也有傳入傳出,和方法相似,但沒有C#里面具體 的方法的概念,特別把這些容易 混淆的知識點整理一下,以作備忘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM