原文:《C# Version 3.0 Specification》,Microsoft
翻譯:lover_P
表達式樹允許將拉姆達表達式表現為數據結構而不是可執行代碼。一個可以轉換為委托類型D的拉姆達表達式也可以轉換為一個類型為System.Query.Expression<D>的表達式樹。將一個拉姆達表達式轉換為委托類型導致可執行代碼被委托所生成和引用,而將其轉換為一個表達式樹類型將導致創建了表達式樹實例的代碼被發出(Emit)。表達式樹是拉姆達表達式的一種高效的內存中(in-memory)數據表現形式,並且使得表達式的結構變得透明和明顯。
下面的例子將一個拉姆達表達式分別表現為了可執行代碼和表達式樹。由於存在到Func<int, int>的轉換,因此存在到Expression<Func<int, int>>的轉換。
Func<int, int> f = x => x + 1; // 代碼
Expression<Func<int, int>> e = x => x + 1; // 數據
在這些賦值完成之後,委托f標識一個返回x + 1的方法,而表達式樹e表示一個描述了表達式x + 1的數據結構。
注意
表達式樹的結構將被轉換為一份單獨的規范。該規范在PDC 2005技術預覽版中並不適用。