Comment : exécuter des arborescences d'expression (C# et Visual Basic)

Cette rubrique vous indique comment exécuter une arborescence d'expression. L'exécution d'une arborescence d'expression peut retourner une valeur ou peut simplement exécuter une opération telle que l'appel d'une méthode.

Seules les arborescences d'expression qui représentent des expressions lambda peuvent être exécutées. Les arborescences d'expression qui représentent des expressions lambda sont de type LambdaExpression ou Expression<TDelegate>. Pour exécuter ces arborescences d'expression, appelez la méthode Compile pour créer un délégué exécutable, puis appelez le délégué.

Notes

Si le type du délégué n'est pas connu, c'est-à-dire si l'expression lambda est de type LambdaExpression et non Expression<TDelegate>, vous devez appeler la méthode DynamicInvoke sur le délégué au lieu de l'appeler directement.

Si une arborescence d'expression ne représente pas une expression lambda, vous pouvez créer une expression lambda dont le corps sera l'arborescence d'expression d'origine en appelant la méthode Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>). Ensuite, vous pouvez exécuter l'expression lambda comme indiqué précédemment dans cette section.

Exemple

L'exemple de code suivant montre comment exécuter une arborescence d'expression qui représente l'élévation d'un nombre à une puissance en créant et en exécutant une expression lambda. Le résultat, qui représente le nombre élevé à la puissance, est affiché.

        ' 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

Compilation du code

  • Ajoutez une référence de projet à System.Core.dll si elle n'est pas déjà référencée.

  • Incluez l'espace de noms System.Linq.Expressions.

Voir aussi

Tâches

Comment : modifier des arborescences d'expression (C# et Visual Basic)

Concepts

Arborescences d'expression (C# et Visual Basic)