Cómo: Ejecutar árboles de expresión (C# y Visual Basic)
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 expresión (C# y Visual Basic)