Expression.TryCatchFinally(Expression, Expression, CatchBlock[]) 方法   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
创建一个表示 try 块的 TryExpression,该 try 块包含任意数量的 catch 语句和一个 finally 块。
public:
 static System::Linq::Expressions::TryExpression ^ TryCatchFinally(System::Linq::Expressions::Expression ^ body, System::Linq::Expressions::Expression ^ finally, ... cli::array <System::Linq::Expressions::CatchBlock ^> ^ handlers);public static System.Linq.Expressions.TryExpression TryCatchFinally (System.Linq.Expressions.Expression body, System.Linq.Expressions.Expression finally, params System.Linq.Expressions.CatchBlock[] handlers);public static System.Linq.Expressions.TryExpression TryCatchFinally (System.Linq.Expressions.Expression body, System.Linq.Expressions.Expression? finally, params System.Linq.Expressions.CatchBlock[]? handlers);static member TryCatchFinally : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.CatchBlock[] -> System.Linq.Expressions.TryExpressionPublic Shared Function TryCatchFinally (body As Expression, finally As Expression, ParamArray handlers As CatchBlock()) As TryExpression参数
- body
- Expression
try 块的主体。
- finally
- Expression
finally 块的主体。
- handlers
- CatchBlock[]
包含零个或多个 CatchBlock 表达式的数组,这些表达式表示要与 try 块关联的 catch 语句。
返回
创建的 TryExpression。
示例
以下示例演示如何创建 TryExpression 包含 catch 语句和 finally 语句的对象。
// Add the following directive to the file.
// using System.Linq.Expressions;
// A TryExpression object that has a catch statement and a finally statement.
// The return types of the try block and all catch blocks must be the same.
TryExpression tryCatchExpr =
    Expression.TryCatchFinally(
        Expression.Block(
            Expression.Throw(Expression.Constant(new DivideByZeroException())),
            Expression.Constant("Try block")
        ),
        Expression.Call(typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), Expression.Constant("Finally block")),
        Expression.Catch(
            typeof(DivideByZeroException),
            Expression.Constant("Catch block")
        )
    );
// The following statement first creates an expression tree,
// then compiles it, and then runs it.
// If the exception is caught,
// the result of the TryExpression is the last statement
// of the corresponding catch statement.
Console.WriteLine(Expression.Lambda<Func<string>>(tryCatchExpr).Compile()());
// This code example produces the following output:
//
// Finally block
// Catch block
' Add the following directive to the file:
' Imports System.Linq.Expressions 
' A TryExpression object that has a catch statement and a finally statement.
' The return types of the try block and all catch blocks must be the same.
Dim tryCatchExpr As TryExpression =
    Expression.TryCatchFinally(
        Expression.Block(
            Expression.Throw(Expression.Constant(New DivideByZeroException())),
            Expression.Constant("Try block")
         ),
    Expression.Call(
        GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}),
        Expression.Constant("Finally block")
    ),
    Expression.Catch(
        GetType(DivideByZeroException),
        Expression.Constant("Catch block")
    )
)
' The following statement first creates an expression tree,
' then compiles it, and then runs it.
' If the exception is caught, 
' the result of the TryExpression is the last statement 
' of the corresponding catch statement.
Console.WriteLine(Expression.Lambda(Of Func(Of String))(tryCatchExpr).Compile()())
' This code example produces the following output:
'
' Finally block
' Catch block