沒有使用表示式樹的**:
//公式引數名稱
var parameternamegroup = getgroupsetupparameters(formulaelements, "parameternamegroup");
//公式引數範圍
var parameterrange = getgroupsetupparameters(formulaelements, "parameterrange");
//公式
var image = getgroupsetupparameters(formulaelements, "image");
getgroupsetupparameters返回的是乙個ilist型別, 注意上面不止一次的呼叫了getgroupsetupparameters,但每次都傳入乙個一樣的引數formulaelements
下面使用表示式樹來簡化這個函式呼叫
expression>> ex = name => getgroupsetupparameters(formulaelements, name);
var funcgetparameters = ex.compile();
//公式引數名稱
var parameternamegroup = funcgetparameters("parameternamegroup");
//公式引數範圍
var parameterrange = funcgetparameters("parameterrange");
//檢查引數合法性
var validparameter = funcgetparameters("validparameter");
注意看上面的修改,修改之前,需要呼叫的函式(getgroupsetupparameters)每次都是傳兩個引數,
但有乙個引數是一樣的,就是formulaelements!如果只呼叫一次這個函式還好,但是如果多次呼叫,就讓人感到很累贅了,這個時候可以用表示式樹簡化,去掉乙個引數
注意下面兩行**
expression>> ex = name => getgroupsetupparameters(formulaelements, name);
var funcgetparameters = ex.compile();
funcgetparameters就是最終編譯(典型的動態程式設計特徵)表示式樹後,形成的該表示式的委託.可以看到,這個表示式樹的構造是乙個**可控的過程(也就是說,可以動態構建)
你甚至可以寫成
expression>> ex = null;
if (***x == true)
ex = name => somemethod1(formulaelements, name);
else
ex = name => somemethod2(formulaelements, name);
這樣就是依據條件來生成乙個內部實現不同的委託,是不是很神奇? Lambda表示式和Lambda表示式樹
原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...
Lambda表示式表示式樹
在c 3.0中,繼匿名方法之後出現了lambda 表示式,使表達更為簡潔 快捷。lambda 表示式使用lambda 運算子 來定義,語法如下 引數列表 lambda 運算子的左邊是輸入引數,定義lambda表示式的接收引數列表,右邊包含表示式或語句塊,表示將表示式的值或語句塊返回的值傳給左邊的引數...
Lambda表示式樹
表示式的引數 parameterexpression a expression.parameter typeof int a parameterexpression b expression.parameter typeof int b 表示式的主體部分 binaryexpression be ex...