Поделиться через


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

Обновлен: Ноябрь 2007

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

Создание лямбда-выражения

  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))
    

Пример

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

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

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

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

Делегаты и оператор AddressOf

Лямбда-выражения

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

Ссылки

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

Оператор Delegate

Enumerable