expression就是表示式目錄樹,是以樹形資料結構表示**,其中每乙個節點都是一種表示式。
用lambda表示式來建立乙個簡單的expression
使用lambda表示式,編譯器在生成il時會幫我們拼裝表示式目錄樹,示例:
expression> expr = (a, b) => a * b + 3;
除錯檢視表示式的結構:
手動拼裝表示式目錄樹
parameterexpression left_a = expression.parameter(typeof(int), "a");//left: expressionparameter
parameterexpression right_b = expression.parameter(typeof(int), "b");//right: expressionparameter
var right_3 = expression.constant(3);//right:expressionconstant
var left_mutiply = expression.multiply(left_a, right_b);//left : expressionmultiply
var plus = expression.add(left_mutiply, right_3);//expressionadd
expression> expression = expression.lambda>(plus, new parameterexpression );
int expr_result = expression.compile().invoke(2, 3);
console.writeline(expr_result);
/* output:
9*/
表示式目錄樹的簡單應用
最直接的應用就是把資料庫實體轉成一些業務實體。如果迴圈賦值,工作量大。想要減少寫的**量,這時可以用表示式目錄樹來,也可以用反射來做,但反射遠比不上表示式目錄樹。
兩個實體:
public class user
public int age
public string name
}public class userdto
public int age
public string name
public string work
}
封裝表示式目錄樹,傳入乙個tin物件,返回乙個新tout物件
private static func_func = null;
memberinitexpression memberinitexpression = expression.memberinit(expression.new(typeof(tout)), memberbindinglist.toarray());
expression> lambda = expression.lambda>(memberinitexpression, new parameterexpression
);_func = lambda.compile();//拼裝是一次性的
}public static tout trans(tin t)
} 使用:
user user = new user()
;userdto.work = "programmer";
三目表示式
對於有些選擇分支結構,可以使用簡單的條件運算子來代替.如 if a可以用下面的條件運算子來處理 min a?a b 其中 a 是乙個 條件表示式 它是這樣執行的 如果a 條件運算子由兩個符號組成 和 要求有3個操作物件,所以也叫它三目運算子,它是c語言中唯一的三目運算子.它的一般形式為 表示式1?表...
三目表示式的運用
舉例如下 max a b a b 取變數a,b中較大的乙個,並賦值給變數max 三目運算子是?結構的運算 所謂三目就是需要三個變數對能進行運算的操作 舉個簡單的例子 a 2 1?3 4 可分成幾個部分,用括號分開 a 2 1 3 4 最左邊是賦值操作 第二個部分是乙個判斷 第三和第四部分是兩個常數 ...
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...