Практическое руководство. Создание лямбда-выражения (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))
    

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

  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 класса Enumerable требует делегат типа Boolean в качестве аргумента.Для этой цели в примере используется лямбда-выражение.Оно возвращает 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

См. также

Задачи

Практическое руководство. Передача процедур другой процедуре в Visual Basic

Ссылки

Оператор Function (Visual Basic)

Оператор Sub (Visual Basic)

Оператор Delegate

Enumerable

Основные понятия

Лямбда-выражения (Visual Basic)

Знакомство с LINQ в Visual Basic

Другие ресурсы

Делегаты (Visual Basic)