Vorgehensweise: Ausführen von Ausdrucksbaumstrukturen (C#)How to: Execute Expression Trees (C#)

In diesem Thema erfahren Sie, wie eine Ausdrucksbaumstruktur ausgeführt wird.This topic shows you how to execute an expression tree. Die Ausführung einer Ausdrucksbaumstruktur gibt möglicherweise einen Wert zurück. Es kann jedoch auch nur eine Aktion ausgeführt werden, z.B. das Aufrufen einer Methode.Executing an expression tree may return a value, or it may just perform an action such as calling a method.

Nur Ausdrucksbaumstrukturen, die Lambdaausdrücke darstellen, können ausgeführt werden.Only expression trees that represent lambda expressions can be executed. Ausdrucksbaumstrukturen, die Lambdaausdrücke darstellen, sind vom Typ LambdaExpression oder Expression<TDelegate>.Expression trees that represent lambda expressions are of type LambdaExpression or Expression<TDelegate>. Um diese Ausdrucksbaumstruktur auszuführen, rufen Sie die Compile-Methode auf, um einen ausführbaren Delegaten zu erstellen und diesen anschließend aufzurufen.To execute these expression trees, call the Compile method to create an executable delegate, and then invoke the delegate.

Hinweis

Wenn der Typ des Delegaten nicht bekannt ist, d.h. wenn der Lambdaausdruck vom Typ LambdaExpression und nicht Expression<TDelegate> ist, müssen Sie die DynamicInvoke-Methode auf dem Delegaten aufrufen, anstatt sie direkt aufzurufen.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.

Wenn eine Ausdrucksbaumstruktur keinen Lambdaausdruck darstellt,können Sie einen neuen Lambdaausdruck erstellen, der die ursprüngliche Ausdrucksbaumstruktur als Textkörper hat, indem Sie die Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)-Methode aufrufen.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. Anschließend können Sie den Lambdaausdruck ausführen, wie weiter oben in diesem Abschnitt beschrieben.Then, you can execute the lambda expression as described earlier in this section.

BeispielExample

Im folgenden Codebeispiel wird veranschaulicht, wie eine Ausdrucksbaumstruktur ausgeführt wird, die das Potenzieren darstellt, indem ein Lambdaausdruck erstellt und ausgeführt wird.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. Das Ergebnis, das die potenzierte Zahl darstellt, wird angezeigt.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  

Kompilieren des CodesCompiling the Code

  • Fügen Sie einen Projektverweis auf „System.Core.dll“ hinzu, wenn nicht bereits darauf verwiesen wird.Add a project reference to System.Core.dll if it is not already referenced.

  • Binden Sie den System.Linq.Expressions-Namespace ein.Include the System.Linq.Expressions namespace.

Siehe auchSee Also

Ausdrucksbaumstrukturen (C#)Expression Trees (C#)
How to: Modify Expression Trees (C#) (Vorgehensweise: Bearbeiten von Ausdrucksbaumstrukturen (C#))How to: Modify Expression Trees (C#)