Gewusst wie: Ausführen von Ausdrucksbaumstrukturen
Aktualisiert: November 2007
In diesem Thema wird beschrieben, wie eine Ausdrucksbaumstruktur ausgeführt wird. Das Ausführen einer Ausdrucksbaumstruktur kann einen Wert zurückgeben oder nur eine Aktion ausführen, wie 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 Ausdrucksbaumstrukturen auszuführen, rufen Sie die Compile-Methode auf, um ein ausführbares Delegat zu erstellen und das Delegat dann aufzurufen.
Hinweis: |
---|
Wenn der Typ des Delegats nicht bekannt ist, d. h., wenn der Lambdaausdruck vom Typ LambdaExpression und nicht vom Typ Expression<TDelegate> ist, müssen Sie die DynamicInvoke-Methode für das Delegat aufrufen anstatt das Delegat direkt aufzurufen. |
Wenn eine Ausdrucksbaumstruktur keinen Lambdaausdruck darstellt, können Sie einen neuen Lambdaausdruck erstellen, der die ursprüngliche Ausdrucksbaumstruktur als Text enthält, 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
Das folgende Codebeispiel veranschaulicht, wie eine Ausdrucksbaumstruktur ausgeführt wird, die eine Zahl potenziert, indem ein Lambdaausdruck erstellt und ausgeführt wird. Das Ergebnis, das die potenzierte Zahl darstellt, wird angezeigt.
' 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
Kompilieren des Codes
Fügen Sie einen Projektverweis auf System.Core.dll hinzu, wenn er noch nicht existiert.
Schließen Sie den System.Linq.Expressions-Namespace ein.
Siehe auch
Aufgaben
Gewusst wie: Ändern von Ausdrucksbaumstrukturen