Como: Criar uma expressão Lambda (Visual Basic)

A expressão lambda é uma função ou sub-rotina não tem um nome. Uma expressão lambda pode ser usada sempre que um tipo delegate é válido.

Para criar uma única -linha expressão lambda função

  1. Em qualquer situação onde um tipo delegado pode ser usado, digite o que a palavra-chave Function, como no exemplo a seguir:

    Dim add1 = Function

  2. In parentheses, directly after Function, type the parameters of the function. Notice that you do not specify a name after Function.

    Dim add1 = Function (num As Integer)

  3. Following the parameter list, type a single expression as the body of the function. The value that the expression evaluates to is the value returned by the function. You do not use an As clause to specify the return type.

    Dim add1 = Function(num As Integer) num + 1
    

    You call the lambda expression by passing in an integer argument.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Alternatively, the same result is accomplished by the following example:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

Para criar uma sub-rotina expressão lambda single -linha

  1. Em qualquer situação onde um tipo delegado pode ser usado, digite o que a palavra-chave Sub, conforme mostrado no exemplo a seguir.

    Dim add1 = Sub

  2. Entre parênteses, diretamente após Sub, digite os parâmetros da sub-rotina. Notice that you do not specify a name after Sub.

    Dim add1 = Sub (msg As String)

  3. Após a lista de parâmetro , digite uma única demonstrativo , como o corpo da sub-rotina.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    Você pode chamar a expressão lambda, passando um argumentode seqüência de caracteres.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

Para criar uma expressão de lambda multilinha função

  1. Em qualquer situação onde um tipo delegado pode ser usado, digite o que a palavra-chave Function, conforme mostrado no exemplo a seguir.

    Dim add1 = Function

  2. In parentheses, directly after Function, type the parameters of the function. Notice that you do not specify a name after Function.

    Dim add1 = Function (index As Integer)

  3. Press ENTER. O End Functiondedemonstrativo é adicionado automaticamente.

  4. Dentro do corpo da função, adicione o seguinte código para criar uma expressão e retornar o valor. You do not use an As clause to specify the return type.

    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
    

    You call the lambda expression by passing in an integer argument.

    Dim sortColumn = getSortColumn(0)
    

Para criar uma sub-rotina de expressão lambda multilinha

  1. Em qualquer situação onde um tipo delegado pode ser usado, digite o que a palavra-chave Sub, conforme mostrado no exemplo a seguir:

    Dim add1 = Sub

  2. Entre parênteses, diretamente após Sub, digite os parâmetros da sub-rotina. Notice that you do not specify a name after Sub.

    Dim add1 = Sub(msg As String)

  3. Press ENTER. O End Subdedemonstrativo é adicionado automaticamente.

  4. 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
    

    Você pode chamar a expressão lambda, passando um argumentode seqüência de caracteres.

    writeToLog("Application started.")
    

Exemplo

A common use of lambda expressions is to define a function that can be passed in as the argument for a parameter whose type is Delegate. In the following example, the GetProcesses method returns an array of the processes running on the local computer. The Where method from the Enumerable class requires a Boolean delegate as its argument. A expressão lambda no exemplo é usada para essa finalidade. It returns True for each process that has only one thread, and those are selected 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

The previous example is equivalent to the following code, which is written in LINQ (consulta integrada à linguagem) syntax:

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 Function (Visual Basic)

Instrução Sub (Visual Basic)

Instrução Delegate

Enumerable

Conceitos

Expressões Lambda (Visual Basic)

Introdução ao LINQ no Visual Basic

Outros recursos

Delegados (Visual Basic)