Vorgehensweise: Ausführen von Ausdrucksbaumstrukturen (C#)

In diesem Thema erfahren Sie, wie eine Ausdrucksbaumstruktur ausgeführt wird. 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.

Nur Ausdrucksbaumstrukturen, die Lambdaausdrücke darstellen, können ausgeführt werden. Ausdrucksbaumstrukturen, die Lambdaausdrücke darstellen, sind vom Typ LambdaExpression oder 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.

Hinweis

Wenn der Typ des Delegaten unbekannt ist, d.h., wenn der Lambdaausdruck des Typs LambdaExpression und nicht Expression<TDelegate> entspricht, müssen Sie die DynamicInvoke-Methode auf dem Delegaten aufrufen, anstatt ihn direkt aufzurufen.

Wenn eine Ausdrucksbaumstruktur keinen Lambdaausdruck darstellt, können Sie einen neuen Lambdaausdruck erstellen, der die ursprüngliche Ausdrucksbaumstruktur als Textkörper besitzt, indem Sie die Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)-Methode aufrufen. Anschließend können Sie den Lambdaausdruck ausführen, wie weiter oben in diesem Abschnitt beschrieben.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie eine Ausdrucksbaumstruktur ausgeführt wird, die das Potenzieren darstellt, indem ein Lambdaausdruck erstellt und ausgeführt wird. Das Ergebnis, das die potenzierte Zahl darstellt, wird angezeigt.

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

  • Fügen Sie einen Projektverweis auf „System.Core.dll“ hinzu, wenn nicht bereits darauf verwiesen wird.

  • Binden Sie den System.Linq.Expressions-Namespace ein.

Siehe auch

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