Condividi tramite


Procedura: eseguire strutture ad albero dell'espressione

Aggiornamento: novembre 2007

In questo argomento viene illustrato come eseguire una struttura ad albero dell'espressione. L'esecuzione di una struttura ad albero dell'espressione può restituire un valore o può eseguire solo un'azione, ad esempio la chiamata a un metodo.

Possono essere eseguite solo le strutture ad albero dell'espressione che rappresentano espressioni lambda. Le strutture ad albero dell'espressione che rappresentano espressioni lambda sono di tipo LambdaExpression o Expression<TDelegate>. Per eseguire tali strutture ad albero dell'espressione, chiamare il metodo Compile per creare un delegato eseguibile, quindi richiamare il delegato.

Nota:

Se il tipo del delegato non è noto, ovvero l'espressione lambda è di tipo LambdaExpression e non Expression<TDelegate>, è necessario chiamare il metodo DynamicInvoke sul delegato anziché richiamarlo direttamente.

Se una struttura ad albero dell'espressione non rappresenta un'espressione lambda, è possibile creare una nuova espressione lambda che utilizza come corpo la struttura ad albero dell'espressione originale chiamando il metodo Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>). Sarà quindi possibile eseguire l'espressione lambda come descritto precedentemente in questa sezione.

Esempio

Nell'esempio di codice seguente viene descritto come eseguire una struttura ad albero dell'espressione che rappresenta l'elevamento di un numero a una potenza mediante la creazione e l'esecuzione di un'espressione lambda. Verrà visualizzato il risultato che rappresenta il numero elevato a potenza.

' The expression tree to execute.
Dim be As BinaryExpression = Expression.Power(Expression.Constant(2.0R), Expression.Constant(3.0R))

' Create a lambda expression.
Dim le As Expression(Of Func(Of Double)) = Expression.Lambda(Of Func(Of Double))(be)

' Compile the lambda expression.
Dim compiledExpression As Func(Of Double) = le.Compile()

' Execute the lambda expression.
Dim result As Double = compiledExpression()

' Display the result.
MsgBox(result)

' This code produces the following output:
' 8

// The expression tree to execute.
BinaryExpression be = Expression.Power(Expression.Constant(2D), Expression.Constant(3D));

// Create a lambda expression.
Expression<Func<double>> le = Expression.Lambda<Func<double>>(be);

// Compile the lambda expression.
Func<double> compiledExpression = le.Compile();

// Execute the lambda expression.
double result = compiledExpression();

// Display the result.
Console.WriteLine(result);

// This code produces the following output:
// 8

Compilazione del codice

  • Aggiungere un riferimento di progetto a System.Core.dll, se non è già presente.

  • Includere lo spazio dei nomi System.Linq.Expressions.

Vedere anche

Attività

Procedura: modificare strutture ad albero dell'espressione

Concetti

Strutture ad albero dell'espressione