C Expression表示式目錄樹

2021-09-29 18:40:51 字數 1804 閱讀 1579

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 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...