Procedura: creare un'espressione lambda
Aggiornamento: novembre 2007
Una espressione lambda è una funzione senza un nome, che valuta una singola espressione e restituisce il relativo valore.
Per creare un'espressione lambda
All'interno di un metodo, 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))
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 inviata a questo scopo. Restituisce True per ogni processo che dispone di un solo thread e quelli selezionati in 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'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
Concetti
Delegati e operatore AddressOf
Introduzione a LINQ in Visual Basic