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
In qualsiasi situazione in cui è possibile usare 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. Si noti che non si specifica un nome dopoFunction
.Dim add1 = Function
(num As Integer)
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))
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
In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave
Sub
, come illustrato nell'esempio seguente:Dim add1 =
Sub
Tra parentesi, direttamente dopo
Sub
, digitare i parametri della subroutine. Si noti che non si specifica un nome dopoSub
.Dim add1 = Sub
(msg As String)
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
In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave
Function
, come illustrato nell'esempio seguente:Dim add1 =
Function
Tra parentesi, direttamente dopo
Function
, digitare i parametri della funzione. Si noti che non si specifica un nome dopoFunction
.Dim add1 = Function
(index As Integer)
Premere INVIO. L'istruzione
End Function
viene aggiunta automaticamente.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
In qualsiasi situazione in cui è possibile usare un tipo delegato, digitare la parola chiave
Sub
, come illustrato nell'esempio seguente:Dim add1 =
Sub
Tra parentesi, direttamente dopo
Sub
, digitare i parametri della subroutine. Si noti che non si specifica un nome dopoSub
.Dim add1 = Sub
(msg As String)
Premere INVIO. L'istruzione
End Sub
viene aggiunta automaticamente.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