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

2022-03-21 12:12:26 字數 3060 閱讀 4927

一、blockexpression類:表式乙個包含可在其中定義變數的表示式序列的塊。是一組表示式,類似於多個委託的 += 後的效果,其返回表示式是最後乙個表示式決定。

以下是blockexpression的例子(取自官網中的例子,略改了下)

//

宣告乙個包含有4個表示式的表示式塊。

blockexpression blockexpr = expression.block(expression.call(null

,

typeof(console).getmethod("

write

", new type ), expression.constant("

你好!")),//

1 expression.call(null, typeof(console).getmethod("

writeline

", new type ),

expression.constant(

"blockexpression表示式!

")), //

2 expression.constant(42), //

3 expression.call(null, typeof(string).getmethod("

concat

", new type ),

expression.constant(

"測試1

"), expression.constant("

測試2")) //4);

console.writeline(

"***********************");

console.writeline(

"顯示表達示塊的執行結果:");

//首先建立表示式樹,

//編譯,執行.

var result = expression.lambdastring>>(blockexpr).compile()();

//顯示表示式塊各表示式.

console.writeline("

表示式塊中的各表示式:");

foreach (var expr in

blockexpr.expressions)

console.writeline(expr.tostring());

//表示式返回值

console.writeline("

表示式返回值");

console.writeline(result);

//***********************

//顯示表達示塊的執行結果:

//你好!blockexpression表示式!

//表示式塊中的各表示式:

//write("你好!")

//writeline("blockexpression表示式!")

//42

//concat("測試1 ", "測試2")

//表示式返回值

//測試1 測試2

二、catchblock類:表示 try 塊中的 catch 語句。

單獨的catchblock是沒有意義的,他必需和tryexpression一起使用才有用。

tryexpression類:表示 try/catch/finally/fault 塊。

構建如下表示式:(try {} catch {})

tryexpression trycatchexpr =expression.trycatch(

expression.block(

expression.divide(expression.constant(

50), expression.constant(2

)), expression.constant(

"無異常返回")

),expression.catch(

typeof

(dividebyzeroexception),

expression.constant(

"異常返回")));

console.writeline(expression.lambda

string>>(trycatchexpr).compile()());

//輸出為 :無異常返回

將上面的  expression.constant(2),更改為   expression.constant(0)

//

輸出為:異常返回

如果無法判斷異常型別,剛將typeof(dividebyzeroexception),換成  typeof(exception);

如要增加 finally,則用 trycatchfinally 構建:

tryexpression trycatchexpr2 =expression.trycatchfinally(

expression.block(

expression.divide(expression.constant(

50), expression.constant(2

)), expression.constant(

"無導常返回")

),expression.call(

typeof(console).getmethod("

writeline

", new type ),

expression.constant(

"finally 塊

")),

expression.catch(

typeof

(exception),

expression.constant(

"導常返回")));

console.writeline(expression.lambda

string>>(trycatchexpr2).compile()());

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

一 conditionalexpression 表示式 生成如 iif a b a和b相等 a與b不相等 式子。使用 parameterexpression aip1 expression.parameter typeof int a 1 parameterexpression aip2 expre...

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

一 debuginfoexpression 發出或清除除錯資訊的序列點。這允許偵錯程式在除錯時突出顯示正確的源 static void main string args 執行了下 未經處理的異常 system.reflection.targetinvocationexception 呼叫的目標發生了...

表示式 表示式樹 表示式求值

總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...