Практическое руководство. Создание лямбда-выражения (Visual Basic)

Лямбда-выражение — это функция или подпрограмма, которая не имеет имени. Лямбда-выражение можно использовать везде, где допустимый тип делегата.

Создание лямбда-функции однострочного выражения

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое словоFunction, как показано в следующем примере:

    Dim add1 = Function

  2. В скобках непосредственно после Functionвведите параметры функции. Обратите внимание, что не укажите имя после Function.

    Dim add1 = Function (num As Integer)

  3. В списке параметров введите одно выражение в качестве текста функции. Значение, которое вычисляется выражением, является значением, возвращаемым функцией. Предложение не используется As для указания возвращаемого типа.

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

    Лямбда-выражение вызывается путем передачи целочисленного аргумента.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Кроме того, в следующем примере выполняется тот же результат:

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

Создание однострочного лямбда-выражения subroutine

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое словоSub, как показано в следующем примере.

    Dim add1 = Sub

  2. В скобках непосредственно после Subвведите параметры подпрограммы. Обратите внимание, что не укажите имя после Sub.

    Dim add1 = Sub (msg As String)

  3. В списке параметров введите одну инструкцию в качестве текста подпрограммы.

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

    Лямбда-выражение вызывается путем передачи строкового аргумента.

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

Создание функции многостроного лямбда-выражения

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое словоFunction, как показано в следующем примере.

    Dim add1 = Function

  2. В скобках непосредственно после Functionвведите параметры функции. Обратите внимание, что не укажите имя после Function.

    Dim add1 = Function (index As Integer)

  3. Нажмите клавишу ВВОД. Инструкция End Function добавляется автоматически.

  4. В тексте функции добавьте следующий код, чтобы создать выражение и вернуть значение. Предложение не используется As для указания возвращаемого типа.

    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
    

    Лямбда-выражение вызывается путем передачи целочисленного аргумента.

    Dim sortColumn = getSortColumn(0)
    

Создание вложенных лямбда-выражений с несколькими строками

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое словоSub, как показано в следующем примере:

    Dim add1 = Sub

  2. В скобках непосредственно после Subвведите параметры подпрограммы. Обратите внимание, что не укажите имя после Sub.

    Dim add1 = Sub (msg As String)

  3. Нажмите клавишу ВВОД. Инструкция End Sub добавляется автоматически.

  4. В тексте функции добавьте следующий код для выполнения при вызове подпрограммы.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Лямбда-выражение вызывается путем передачи строкового аргумента.

    writeToLog("Application started.")
    

Пример

Обычное использование лямбда-выражений заключается в определении функции, которую можно передать в качестве аргумента для параметра, тип которого является Delegate. В следующем примере метод возвращает массив процессов, GetProcesses выполняемых на локальном компьютере. Метод Where из класса требует делегата EnumerableBoolean в качестве аргумента. Лямбда-выражение в примере используется для этой цели. Он возвращается True для каждого процесса, имеющего только один поток, и они выбраны в 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

Предыдущий пример эквивалентен следующему коду, написанному в синтаксисе LINQ:

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

См. также