表示式 使用API建立表示式樹(5)

2022-03-21 12:12:25 字數 3299 閱讀 3635

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