若是你使用過 LINQ,則會有豐富庫(其中 Func
類型是 API 集的一部分)的經驗。 (若是尚不熟悉 LINQ,建議閱讀 LINQ 教程,以及本文前面有關 lambda 表達式的文章。)表達式樹提供與做爲函數的參數的更豐富的交互。html
在建立 LINQ 查詢時,一般使用 Lambda 表達式編寫函數參數。 在典型的 LINQ 查詢中,這些函數參數會被轉換爲編譯器建立的委託。git
當想要進行更豐富的交互時,須要使用表達式樹。 表達式樹將代碼表示爲能夠檢查、修改或執行的結構。 這些工具讓你可以在運行時操做代碼。 能夠編寫檢查正在運行的算法的代碼,或插入新的功能。 在更加高級的方案中,你能夠修改正在運行的算法,甚至能夠將 C# 表達式轉換爲另外一種形式從而可在另外一環境中執行。github
你可能已經編寫過使用表達式樹的代碼。 實體框架的 LINQ API 接受表達式樹,以此做爲 LINQ 查詢表達式模式的參數。 這使得 Entity Framework(實體框架)可以將使用 C# 編寫的查詢轉換爲在數據庫引擎中執行的 SQL。 另外一個示例是 Moq,它是用於 .NET 的熱門模擬框架。算法
本教程的其他部分將探索表達式樹是什麼、檢查支持表達式樹的框架類,並介紹如何使用表達式樹。 你將學習如何閱讀表達式樹、如何建立表達式樹、如何建立修改的表達式樹,以及如何執行表達式樹所表示的代碼。 閱讀後,即可以開始使用這些結構來建立豐富的自適應算法。數據庫