Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Gewusst wie: Ausführen von Ausdrucksbaumstrukturen (C# und Visual Basic)

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. Rufen Sie dann das Delegat auf.

HinweisHinweis

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.

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.
            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



  • Fügen Sie einen Projektverweis auf System.Core.dll hinzu, wenn er noch nicht existiert.

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

Community-Beiträge

HINZUFÜGEN
Anzeigen: