Instrukcje: Wykonywanie drzew wyrażeń (C#)How to: Execute Expression Trees (C#)

W tym temacie przedstawiono sposób wykonywania drzewo wyrażenia.This topic shows you how to execute an expression tree. Wykonywanie drzewa wyrażenie może zwrócić wartość lub go, że po prostu wykonać akcja, taka jak wywołanie metody.Executing an expression tree may return a value, or it may just perform an action such as calling a method.

Mogą być wykonywane tylko drzew wyrażeń, które reprezentują wyrażenia lambda.Only expression trees that represent lambda expressions can be executed. Drzewa wyrażeń, które reprezentują wyrażenia lambda są typu LambdaExpression lub Expression<TDelegate>.Expression trees that represent lambda expressions are of type LambdaExpression or Expression<TDelegate>. Aby wykonać te drzew wyrażeń, należy wywołać Compile metodę, aby utworzyć delegat pliku wykonywalnego, a następnie wywołaj delegat.To execute these expression trees, call the Compile method to create an executable delegate, and then invoke the delegate.

Uwaga

Jeśli typ delegata nie jest znany, wyrażenie lambda jest typu LambdaExpression i nie Expression<TDelegate>, należy wywołać DynamicInvoke metody delegata zamiast wywołanie go bezpośrednio.If the type of the delegate is not known, that is, the lambda expression is of type LambdaExpression and not Expression<TDelegate>, you must call the DynamicInvoke method on the delegate instead of invoking it directly.

Drzewo wyrażenia nie reprezentuje wyrażenie lambda, można utworzyć nowe wyrażenie lambda, które ma oryginalnego drzewa wyrażeń jako jego treści, wywołując Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) metody.If an expression tree does not represent a lambda expression, you can create a new lambda expression that has the original expression tree as its body, by calling the Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) method. Następnie można wykonać wyrażenia lambda, zgodnie z wcześniejszym opisem w tej sekcji.Then, you can execute the lambda expression as described earlier in this section.

PrzykładExample

Poniższy przykład kodu demonstruje sposób wykonywania drzewo wyrażenia, reprezentujący zwiększenie liczby do potęgi przez tworzenie wyrażenia lambda i jej wykonanie.The following code example demonstrates how to execute an expression tree that represents raising a number to a power by creating a lambda expression and executing it. Wynik, który reprezentuje liczbę podniesioną do potęgi, jest wyświetlany.The result, which represents the number raised to the power, is displayed.

// 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  

Kompilowanie koduCompiling the Code

  • Obejmują System.Linq.Expressions przestrzeni nazw.Include the System.Linq.Expressions namespace.

Zobacz takżeSee also