Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema erfahren Sie, wie Sie einen Ausdrucksbaum ausführen. Das Ausführen eines Ausdrucksbaumes gibt möglicherweise einen Wert zurück, oder es führt einfach eine Aktion aus, z. B. das Aufrufen einer Methode.
Nur Ausdrucksbäume, die Lambda-Ausdrü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 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.
Wenn ein Ausdrucksbaum keinen Lambda-Ausdruck darstellt, können Sie einen neuen Lambda-Ausdruck erstellen, der den ursprünglichen Ausdrucksbaum als Hauptteil hat, indem Sie die Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) Methode aufrufen. Anschließend können Sie den Lambda-Ausdruck wie weiter oben in diesem Abschnitt beschrieben ausführen.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie eine Ausdrucksstruktur, die das Erhöhen einer Zahl auf eine Potenz darstellt, durch Erstellen und Ausführen eines Lambda-Ausdrucks 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
Kompilieren des Codes
- Schließen Sie den System.Linq.Expressions-Namespace ein.