Cómo: Ejecutar árboles de expresiones

Actualización: noviembre 2007

En este tema se muestra cómo se ejecuta un árbol de expresión. Cuando se ejecuta un árbol de expresión, puede devolverse un valor o simplemente puede realizarse una acción, como llamar a un método.

Sólo se pueden ejecutar los árboles de expresiones que representan expresiones lambda. Los árboles de expresiones que representan expresiones lambda son de tipo LambdaExpression o Expression<TDelegate>. Si desea ejecutar estos árboles de expresiones, llame al método Compile para crear un delegado ejecutable y, a continuación, invoque el delegado.

Nota:

Si no se conoce el tipo del delegado, es decir, si la expresión lambda es de tipo LambdaExpression y no de tipo Expression<TDelegate>, debe llamar al método DynamicInvoke del delegado en lugar de invocarlo directamente.

Si un árbol de expresión no representa una expresión lambda, puede crear una nueva expresión lambda que tenga como cuerpo el árbol de expresión original; para ello, llame al método Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>). A continuación, puede ejecutar la expresión lambda tal y como se describió anteriormente en esta sección.

Ejemplo

En el ejemplo de código siguiente se muestra cómo se ejecuta un árbol de expresión que representa la elevación de un número a una potencia, para lo cual, se crea una expresión lambda y se ejecuta. Finalmente, se muestra el resultado, que representa el número elevado a la potencia.

' 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

Compilar el código

  • Agregue una referencia de proyecto a System.Core.dll si ésta no existe aún.

  • Incluya el espacio de nombres System.Linq.Expressions.

Vea también

Tareas

Cómo: Modificar árboles de expresiones

Conceptos

Árboles de expresiones