[深入學習C#]運算式樹狀架構類型——Expression tree types

來源:互聯網
上載者:User

標籤:c#   lambda運算式   運算式樹狀架構   

  運算式樹狀架構允許將 lambda 運算式表示為資料結構而非可執行代碼。運算式分類樹是System.Linq.Expressions.Expression< D > 形式的運算式分類樹類型 (expression tree type) 的值,其中 D 是任何委託類型。
  如果存在從 lambda 運算式到委託類型 D 的轉換,則也存在到運算式樹狀架構類型 Expression< D > 的轉換。而lambda 運算式到委託類型的轉換產生引用該 lambda 運算式的可執行代碼的委託,到運算式樹狀架構類型的轉換建立該 lambda 運算式的運算式樹狀架構表示形式。
  運算式樹狀架構是 lambda 運算式在記憶體中的高效資料表示形式,使 lambda 運算式的結構透明而又清晰。
  
  與委託類型 D 一樣, Expression< D > 具有與 D 相同的參數和傳回型別。
  下面的樣本將 lambda 運算式表示為可執行代碼和運算式樹狀架構。因為存在到 Func< int,int > 的轉換,所以也存在到 Expression< Func< int,int > > 的轉換:
  Func< int,int > del = x => x + 1; // Code
  Expression< Func< int,int > > exp = x => x + 1; // Data
  進行上面的賦值之後,委託 del 引用返回 x + 1 的方法,運算式分類樹 exp 引用描述運算式 x => x +1 的資料結構。
  泛型型別 Expression< D > 的確切定義以及將 lambda 運算式轉換為運算式樹狀架構類型時有關構造運算式樹狀架構的準確規則不在本文的介紹範圍之內,將另作說明。
  有兩個要點需要明確指出:
  ● 並非所有 lambda 運算式都能轉換為運算式樹狀架構。例如,具有語句體的 lambda 運算式和包含賦值運算式的 lambda 運算式不能這樣表示。在這些情況下,轉換仍存在,但在編譯時間將失敗
  ● Expression< D > 提供一個執行個體方法 Compile,該方法產生一個類型為 D 的委託:
Func< int,int > del2 = exp.Compile();
  調用此委託將導致執行運算式樹狀架構所表示的代碼。因此,根據上面的定義, del 和 del2 等效,而且
  下面的兩個語句也將等效:
  int i1 = del(1);
  int i2 = del2(1);
  執行此代碼後, i1 和 i2 的值都為 2。

[深入學習C#]運算式樹狀架構類型——Expression tree types

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.