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