Partager via


Comment : créer une expression lambda

Mise à jour : novembre 2007

Une expression lambda est une fonction sans nom qui évalue une expression unique et retourne sa valeur.

Pour créer une expression lambda

  1. Dans une méthode, quelle que soit la situation où un type délégué pourrait être utilisé, tapez le mot clé Function, comme dans l'exemple suivant :

    Dim add1 = Function

  2. Entre parenthèses, directement après Function, tapez les paramètres de la fonction. Notez que vous ne spécifiez pas de nom après Function.

    Dim add1 = Function (num As Integer)

  3. À la suite de la liste de paramètres, tapez une expression unique comme corps de la fonction. La valeur que prend l'expression est celle retournée par la fonction. Vous n'utilisez pas de clause As pour spécifier le type de retour.

    Dim add1 = Function(num As Integer) num + 1
    

    Vous appelez l'expression lambda en passant un argument entier.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Le même résultat est également obtenu par l'exemple suivant :

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

Exemple

Les expressions lambda sont couramment utilisées pour définir une fonction qui peut être passée comme argument pour un paramètre dont le type est Delegate. Dans l'exemple suivant, la méthode GetProcesses retourne un tableau des processus en cours d'exécution sur l'ordinateur local. La méthode Where de la classe Enumerable requiert un délégué Boolean comme argument. L'expression lambda de l'exemple est envoyée à cette fin. Elle retourne la valeur True pour chacun des processus possédant un thread unique, ceux-ci étant sélectionnés dans filteredQuery.

Sub Main()

    ' Create an array of running processes.
    Dim procList As Process() = Diagnostics.Process.GetProcesses

    ' Return the processes that have one thread. Notice that the type
    ' of the parameter does not have to be explicitly stated.
    Dim filteredList = procList.Where(Function(p) p.Threads.Count = 1)

    ' Display the name of each selected process.
    For Each proc In filteredList
        MsgBox(proc.ProcessName)
    Next

End Sub

L'exemple précédent est équivalent au code suivant, écrit en syntaxe LINQ (Language Integrated Query) :

Sub Main()

    Dim filteredQuery = From proc In Diagnostics.Process.GetProcesses _
                        Where proc.Threads.Count = 1 _
                        Select proc

    For Each proc In filteredQuery
        MsgBox(proc.ProcessName)
    Next
End Sub

Voir aussi

Tâches

Comment : passer des procédures à une autre procédure en Visual Basic

Concepts

Délégués et opérateur AddressOf

Expressions lambda

Introduction à LINQ dans Visual Basic

Référence

Function, instruction (Visual Basic)

Delegate, instruction

Enumerable