Partager via


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

Cette rubrique vous 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 sont de type LambdaExpression ou Expression<TDelegate>. Pour exécuter ces arborescences d’expressions, appelez la Compile méthode pour créer un délégué exécutable, puis appelez le délégué.

Remarque

Si le type du délégué n’est pas connu, autrement dit, l’expression lambda est de type LambdaExpression et non Expression<TDelegate>, vous devez appeler la DynamicInvoke méthode sur le délégué au lieu de l’appeler directement.

Si une arborescence d’expressions ne représente pas d’expression lambda, vous pouvez créer une expression lambda qui a l’arborescence d’expressions d’origine comme corps, en appelant la Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) méthode. Ensuite, vous pouvez exécuter l’expression lambda comme décrit précédemment 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