Udostępnij za pośrednictwem


Expression.TryCatchFinally(Expression, Expression, CatchBlock[]) Metoda

Definicja

Tworzy reprezentujący TryExpression blok try z dowolną liczbą instrukcji catch i blokiem 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.TryExpression
Public Shared Function TryCatchFinally (body As Expression, finally As Expression, ParamArray handlers As CatchBlock()) As TryExpression

Parametry

body
Expression

Treść bloku try.

finally
Expression

Treść końcu bloku.

handlers
CatchBlock[]

Tablica zerem lub większą większa CatchBlock liczba wyrażeń reprezentujących instrukcje catch, które mają być skojarzone z blokiem try.

Zwraca

Utworzony element TryExpression.

Przykłady

W poniższym przykładzie pokazano, jak utworzyć obiekt zawierający instrukcję TryExpression catch i instrukcję 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

Dotyczy