Como: Criar uma expressão lambda
Uma expressão lambda é uma função sem um nome que avalia uma única expressão e retorna seu valor.
Para criar uma expressão lambda
Dentro de um método, em qualquer situação em que um tipo delegate pode ser usado, digite a palavra-chave Function, como no exemplo a seguir:
Dim add1 = Function
Entre parênteses, diretamente após Function, digite os parâmetros da função.Observe que você não especifica um nome após Function.
Dim add1 = Function (num As Integer)
Após a lista de parâmetros, digite uma única expressão como corpo da função.O valor que a expressão processará é o valor retornado pela função.Você não usa uma cláusula As para especificar o tipo de retorno.
Dim add1 = Function(num As Integer) num + 1
Você chama a expressão lambda passando um argumento Integer.
' The following line prints 6. Console.WriteLine(add1(5))
Como alternativa, o mesmo resultado é conseguido no exemplo a seguir:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Exemplo
Um uso comum de expressões lambda é para definir uma função que pode ser passada como argumento para um parâmetro cujo tipo é Delegate.No exemplo a seguir, o método GetProcesses retorna uma matriz dos processos em execução no computador local.O método Where da classe Enumerable requer que um delegado Boolean como seu argumento.O expressão lambda no exemplo será enviada para essa finalidade.Ela retorna True para cada processo que tem apenas um segmento, e aqueles selecionados na 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
O exemplo anterior é equivalente ao código a seguir, que está escrito na sintaxe LINQ (consulta integrada à linguagem):
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
Consulte também
Tarefas
Como: PASS procedimentos como outro procedimento no Visual Basic
Conceitos
Delegados e o operador AddressOf
Introdução ao LINQ no Visual Basic