Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Лямбда-выражение — это функция или подпрограмма, которая не имеет имени. Лямбда-выражение можно использовать везде, где подходит тип делегата.
Создание лямбда-функции однострочного выражения
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
Function
, как показано в следующем примере:Dim add1 =
Function
В скобках непосредственно после
Function
введите параметры функции. Обратите внимание, что не укажите имя послеFunction
.Dim add1 = Function
(num As Integer)
В списке параметров введите одно выражение в качестве текста функции. Значение, которое вычисляется выражением, является значением, возвращаемым функцией. Вы не используете предложение
As
для обозначения возвращаемого типа.Dim add1 = Function(num As Integer) num + 1
Вы вызываете лямбда-выражение, передавая целочисленный аргумент.
' The following line prints 6. Console.WriteLine(add1(5))
Кроме того, в следующем примере выполняется тот же результат:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Чтобы создать однострочную лямбда-выражение подпрограмму
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
Sub
, как показано в следующем примере.Dim add1 =
Sub
В скобках непосредственно после
Sub
введите параметры подпрограммы. Обратите внимание, что не укажите имя послеSub
.Dim add1 = Sub
(msg As String)
После списка параметров введите единственное выражение в качестве тела подпрограммы.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Лямбда-выражение вызывается путем передачи строкового аргумента.
' The following line prints "Hello". writeMessage("Hello")
Создание функции многостроного лямбда-выражения
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
Function
, как показано в следующем примере.Dim add1 =
Function
В скобках непосредственно после
Function
введите параметры функции. Обратите внимание, что не укажите имя послеFunction
.Dim add1 = Function
(index As Integer)
Нажмите клавишу ВВОД. Инструкция
End Function
добавляется в систему автоматически.В тексте функции добавьте следующий код, чтобы создать выражение и вернуть значение. Вы не используете предложение
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)
Создание многострочной подпрограммы с использованием лямбда-выражений
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
Sub
, как показано в следующем примере:Dim add1 =
Sub
В скобках непосредственно после
Sub
введите параметры подпрограммы. Обратите внимание, что не укажите имя послеSub
.Dim add1 = Sub
(msg As String)
Нажмите клавишу ВВОД. Инструкция
End Sub
добавляется в систему автоматически.В тексте функции добавьте следующий код для выполнения при вызове подпрограммы.
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
Предыдущий пример эквивалентен следующему коду, написанному в синтаксисе Language-Integrated query (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