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

W tym temacie pokazano, jak wykonać drzewo wyrażenia.This topic shows you how to execute an expression tree. Wykonanie drzewa wyrażenia może zwrócić wartość lub może po prostu wykonać akcję, taką jak wywołanie metody.Executing an expression tree may return a value, or it may just perform an action such as calling a method.

Można wykonywać tylko drzewa 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ą LambdaExpression typu Expression<TDelegate>lub.Expression trees that represent lambda expressions are of type LambdaExpression or Expression<TDelegate>. Aby wykonać te drzewa wyrażeń, wywołaj Compile metodę, aby utworzyć delegata pliku wykonywalnego, a następnie Wywołaj delegata.To execute these expression trees, call the Compile method to create an executable delegate, and then invoke the delegate.

Uwaga

Jeśli typ delegata jest nieznany, to oznacza, że wyrażenie lambda jest typu LambdaExpression , a nie Expression<TDelegate> DynamicInvoke , należy wywołać metodę w delegatze zamiast wywoływania jej 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.

Jeśli drzewo wyrażenia nie reprezentuje wyrażenia lambda, można utworzyć nowe wyrażenie lambda, które ma pierwotne drzewo wyrażenia jako jego treść, wywołując Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) metodę.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żenie lambda zgodnie z opisem we wcześniejszej części tej sekcji.Then, you can execute the lambda expression as described earlier in this section.

PrzykładExample

Poniższy przykład kodu demonstruje, jak wykonać drzewo wyrażenia, które reprezentuje podnoszenie liczby do potęgi przez utworzenie wyrażenia lambda i jego 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. Zostanie wyświetlony wynik, który reprezentuje liczbę podniesioną do potęgi.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

  • Uwzględnij przestrzeń nazw System. LINQ. Expressions.Include the System.Linq.Expressions namespace.

Zobacz takżeSee also