Condividi tramite


Procedura: creare un'espressione lambda (Visual Basic)

Un'espressione lambda è una funzione o una subroutine che non ha un nome. È possibile utilizzare un'espressione lambda ogni volta che è valido un tipo delegato.

Per creare una funzione di espressione lambda a riga singola

  1. In qualsiasi situazione in cui potrebbe essere utilizzato 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. Notare che non viene specificato un nome dopo Function.

    Dim add1 = Function (num As Integer)

  3. Dopo l'elenco dei parametri, digitare una sola espressione come corpo della funzione. Il valore che l'espressione darà come risultato è il valore restituito alla funzione chiamante. Non utilizzare una clausola As per specificare il tipo restituito.

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

    L'espressione lambda viene chiamata passando un argomento integer.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. In alternativa, si raggiunge lo stesso risultato come illustrato nell'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 potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Sub, come nell'esempio seguente:

    Dim add1 = Sub

  2. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine. Notare che non viene specificato un nome dopo Sub.

    Dim add1 = Sub (msg As String)

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

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

    L'espressione lambda viene chiamata passando 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 potrebbe essere utilizzato 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. Notare che non viene specificato un nome dopo Function.

    Dim add1 = Function (index As Integer)

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

  4. Nel corpo della funzione aggiungere il codice seguente per creare un'espressione e restituire il valore. Non utilizzare 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
    

    L'espressione lambda viene chiamata passando un argomento integer.

    Dim sortColumn = getSortColumn(0)
    

Per creare una subroutine di espressione lambda su più righe

  1. In qualsiasi situazione in cui potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Sub, come nell'esempio seguente:

    Dim add1 = Sub

  2. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine. Notare che non viene specificato un nome dopo Sub.

    Dim add1 = Sub(msg As String)

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

  4. Nel corpo della funzione aggiungere il codice seguente che deve essere eseguito 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
    

    L'espressione lambda viene chiamata passando un argomento string.

    writeToLog("Application started.")
    

Esempio

Un utilizzo comune delle espressioni lambda è definire una funzione che può essere passata come argomento per un parametro il cui tipo è Delegate. Nell'esempio riportato di seguito, il metodo GetProcesses restituisce una matrice dei processi in esecuzione sul computer locale. Il metodo Where della classe Enumerable richiede un delegato Boolean come argomento. L'espressione lambda nell'esempio viene utilizzata a questo scopo. Restituisce True per ogni processo che dispone di un solo thread e quelli selezionati 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 è equivalente al codice seguente, scritto in 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

Vedere anche

Attività

Procedura: passare una routine a un'altra routine in Visual Basic

Riferimenti

Istruzione Function (Visual Basic)

Istruzione Sub (Visual Basic)

Istruzione Delegate

Enumerable

Concetti

Espressioni lambda (Visual Basic)

Introduzione a LINQ in Visual Basic

Altre risorse

Delegati (Visual Basic)