Share via


Guide pratique pour exécuter des arborescences d’expressions (Visual Basic)

Cette rubrique montre comment exécuter une arborescence d’expressions. L’exécution d’une arborescence d’expressions peut retourner une valeur, ou elle peut simplement effectuer une action telle que l’appel d’une méthode.

Seules les arborescences d’expressions qui représentent des expressions lambda peuvent être exécutées. Les arborescences d’expressions qui représentent des expressions lambda peuvent être de type LambdaExpression ou Expression<TDelegate>. Pour exécuter ces arborescences d’expressions, 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, autrement dit 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’expressions ne représente pas une expression lambda, vous pouvez créer une expression lambda ayant l’arborescence d’expressions d’origine comme corps, en appelant la méthode Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>). Ensuite, vous pouvez exécuter l’expression lambda comme décrit plus haut dans cette section.

Exemple

L’exemple de code suivant montre comment exécuter une arborescence d’expressions qui représente l’élévation d’un nombre à une puissance en créant une expression lambda et en l’exécutant. 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  

Compiler le code

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

Voir aussi