Procedura: creare un'espressione lambda (Visual Basic)

Un'espressione lambda è una funzione o una subroutine che non ha un nome. Un'espressione lambda può essere usata ovunque sia valido un tipo delegato.

Per creare una funzione di espressione lambda a riga singola

  1. In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave Function, come nell'esempio seguente:

    Dim add1 = Function

  2. Tra parentesi, direttamente dopo Function, digitare i parametri della funzione. Si noti che non si specifica un nome dopo Function.

    Dim add1 = Function (num As Integer)

  3. Dopo l'elenco dei parametri, digitare una singola espressione come corpo della funzione. Il valore restituito dall'espressione è il valore restituito dalla funzione. Non si usa una clausola As per specificare il tipo restituito.

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

    Per chiamare l'espressione lambda, passare un argomento Integer.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. In alternativa, lo stesso risultato viene ottenuto dall'esempio seguente:

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

Per creare una subroutine di espressione lambda a riga singola

  1. In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave Sub, come illustrato nell'esempio seguente:

    Dim add1 = Sub

  2. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine. Si noti che non si specifica un nome dopo Sub.

    Dim add1 = Sub (msg As String)

  3. Dopo l'elenco dei parametri, digitare una singola istruzione come corpo della subroutine.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    Per chiamare l'espressione lambda, passare un argomento String.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

Per creare una funzione di espressione lambda su più righe

  1. In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave Function, come illustrato nell'esempio seguente:

    Dim add1 = Function

  2. Tra parentesi, direttamente dopo Function, digitare i parametri della funzione. Si noti che non si specifica un nome dopo Function.

    Dim add1 = Function (index As Integer)

  3. Premere INVIO. L'istruzione End Function viene aggiunta automaticamente.

  4. All'interno del corpo della funzione aggiungere il codice seguente per creare un'espressione e restituire il valore. Non si usa una clausola As per specificare il tipo restituito.

    Dim getSortColumn = Function(index As Integer)
                            Select Case index
                                Case 0
                                    Return "FirstName"
                                Case 1
                                    Return "LastName"
                                Case 2
                                    Return "CompanyName"
                                Case Else
                                    Return "LastName"
                            End Select
                        End Function
    

    Per chiamare l'espressione lambda, passare un argomento Integer.

    Dim sortColumn = getSortColumn(0)
    

Per creare una subroutine di espressione lambda su più righe

  1. In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave Sub, come illustrato nell'esempio seguente:

    Dim add1 = Sub

  2. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine. Si noti che non si specifica un nome dopo Sub.

    Dim add1 = Sub (msg As String)

  3. Premere INVIO. L'istruzione End Sub viene aggiunta automaticamente.

  4. All'interno del corpo della funzione aggiungere il codice seguente da eseguire quando viene richiamata la subroutine.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Per chiamare l'espressione lambda, passare un argomento String.

    writeToLog("Application started.")
    

Esempio

Un uso comune delle espressioni lambda consiste nel definire una funzione che può essere passata come argomento per un parametro il cui tipo è Delegate. Nell'esempio seguente il metodo GetProcesses restituisce una matrice dei processi in esecuzione nel computer locale. Il metodo Where della classe Enumerable richiede un delegato Boolean come argomento. L'espressione lambda nell'esempio viene usata a tale scopo. Restituisce True per ogni processo che ha un solo thread e che viene selezionato in filteredList.

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'esempio precedente equivale al codice seguente, scritto nella sintassi 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

Vedi anche