Como: criar uma expressão Lambda (Visual Basic)
A expressão lambda é uma função ou sub-rotina que não tem um nome.Uma expressão lambda pode ser usada sempre que um tipo delegate é válido.
Para criar uma função de expressão lambda de linha única
Em qualquer situação onde um tipo delegado 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))
Para criar uma sub-rotina de expressão lambda de linha única
Em qualquer situação onde um tipo delegado pode ser usado, digite a palavra-chave Sub, conforme mostrado no exemplo a seguir.
Dim add1 = Sub
Entre parênteses, logo após Sub, digite os parâmetros da sub-rotina.Observe que você não especifica um nome após Sub.
Dim add1 = Sub (msg As String)
Após a lista de parâmetros, digite uma única instrução, como o corpo da sub-rotina.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Chamar a expressão lambda, passando um argumento de seqüência de caracteres.
' The following line prints "Hello". writeMessage("Hello")
Para criar uma função de expressão lambda multilinha
Em qualquer situação onde um tipo delegado pode ser usado, digite a palavra-chave Function, conforme mostrado 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 (index As Integer)
Pressione ENTER.O End Function declaração é adicionada automaticamente.
Dentro do corpo da função, adicione o seguinte código para criar uma expressão e retornar o valor.Você não usa uma cláusula As para especificar o tipo de retorno.
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
Você chama a expressão lambda passando um argumento Integer.
Dim sortColumn = getSortColumn(0)
Para criar uma sub-rotina de expressão lambda multilinha
Em qualquer situação onde um tipo delegado pode ser usado, digite a palavra-chave Sub, conforme mostrado no exemplo a seguir:
Dim add1 = Sub
Entre parênteses, logo após Sub, digite os parâmetros da sub-rotina.Observe que você não especifica um nome após Sub.
Dim add1 = Sub(msg As String)
Pressione ENTER.O End Sub declaração é adicionada automaticamente.
Dentro do corpo da função, adicione o seguinte código para executar quando a sub-rotina é invocada.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
Chamar a expressão lambda, passando um argumento de seqüência de caracteres.
writeToLog("Application started.")
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.A expressão lambda no exemplo é usada para essa finalidade.Ela retorna True para cada processo que tem apenas um segmento, e aqueles selecionados na 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
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: passar procedimentos para outro procedimento em Visual Basic
Referência
Instrução de função (Visual Basic)
Conceitos
Expressões lambda (Visual Basic)
Introdução ao LINQ em Visual Basic