一、conditionalexpression:表示式 生成如 iif((a == b), "a和b相等", "a與b不相等") 式子。
使用:
parameterexpression aip1 = expression.parameter(typeof(int), "a"); //
(1) parameterexpression aip2 = expression.parameter(typeof(int), "b"
); parameterexpression aip3 = expression.parameter(typeof(int
)); console.writeline(aip3.tostring());
//輸出:param_0
binaryexpression aibnexp =expression.makebinary(expressiontype.equal,
aip1,
aip2);
conditionalexpression aicdexp =expression.condition(
aibnexp,
expression.constant(
"a和b相等"),
expression.constant(
"a與b不相等")
);
//(2)
console.writeline(aicdexp.tostring());
//輸出:iif((a == b), "a和b相等", "a與b不相等")
lambdaexpression ailamexp =expression.lambda(
expression.block
//(3)
(
newparameterexpression
, expression.assign(aip1, expression.constant(
10))
, expression.assign(aip2, expression.constant(
30))
, aicdexp
));console.writeline(ailamexp.compile().dynamicinvoke());
console.readline();
1、在上面**段中的(1)出現的 parameterexpression 是引數表達示,使用比較簡單,但很常用,只有兩個構造方法,生成出的效果和資料式子中的未知數是乙個意思,是乙個變數的佔位符。
2、conditionalexpression:構建也是容易的, 如果第乙個引數的計算結果為 true,則執行第二個引數;否則執行第三個引數。
3、在這個**(3)中,使用了blockexpression表達示,在前面已經對他的使用有介紹,這裡演示的是,如何通過blockexpression來生成parameterexpression的賦值,並將值傳入使用該引數的表示式中。(3)的表示式檢視為
.lambda #lambda1() .else }}
因此,如果有引數賦值時,順序是:1)、引數宣告 ;2)、引數賦值;3)、使用此引數(列表)的表達示;
二、switchexpression:表示乙個控制表示式,該表示式通過將控制傳遞到 switchcase 來處理多重選擇。
//構建類似下列**的表示式
//int i = 1;
//switch (i)
//
//宣告 switchcase 的稱值引數,相當於 switch (i)
parameterexpression aiswvp = expression.parameter(typeof(int), "i"
);
//構造
switchexpression aiswvexp =expression.switch(
aiswvp
//switch (i)
, expression.call(
null
,
typeof(console).getmethod("
writeline
", new type ),
expression.constant(
"鼓勵獎")
) //default 預設事例,此引數沒有**無缺省事例
, new switchcase ),
expression.constant(
"一等獎
") )
, expression.constant(
1) //
case 1
) ,expression.switchcase(
expression.call(
null
,
typeof(console).getmethod("
writeline
", new type ),
expression.constant(
"二等獎
") ),
expression.constant(
2) //
case 2
) ,expression.switchcase(
expression.call(
null
,
typeof(console).getmethod("
writeline
", new type ),
expression.constant(
"三等獎
") )
,expression.constant(
3) //
case 3
)
});//the following statement first creates an expression tree,
//then compiles it, and then runs it.
expression.lambda(switchexpr).compile()();
expression.lambda
int>>(aiswvexp, aiswvp).compile().dynamicinvoke(2);
輸出:二等獎
表示式 使用API建立表示式樹(3)
一 debuginfoexpression 發出或清除除錯資訊的序列點。這允許偵錯程式在除錯時突出顯示正確的源 static void main string args 執行了下 未經處理的異常 system.reflection.targetinvocationexception 呼叫的目標發生了...
表示式 使用API建立表示式樹(2)
一 blockexpression類 表式乙個包含可在其中定義變數的表示式序列的塊。是一組表示式,類似於多個委託的 後的效果,其返回表示式是最後乙個表示式決定。以下是blockexpression的例子 取自官網中的例子,略改了下 宣告乙個包含有4個表示式的表示式塊。blockexpression ...
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...