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
In qualsiasi situazione in cui potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Function, come nell'esempio seguente:
Dim add1 = Function
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)
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))
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
In qualsiasi situazione in cui potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Sub, come nell'esempio seguente:
Dim add1 = Sub
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)
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
In qualsiasi situazione in cui potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Function, come nell'esempio seguente:
Dim add1 = Function
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)
Premere INVIO. L'istruzione End Function viene aggiunta automaticamente.
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
In qualsiasi situazione in cui potrebbe essere utilizzato un tipo delegato, digitare la parola chiave Sub, come nell'esempio seguente:
Dim add1 = Sub
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)
Premere INVIO. L'istruzione End Sub viene aggiunta automaticamente.
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``1 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)
Concetti
Espressioni lambda (Visual Basic)
Introduzione a LINQ in Visual Basic