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