Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Лямбда-выражение — это функция или подпрограмма, которая не имеет имени. Лямбда-выражение можно использовать везде, где подходит тип делегата.
Создание лямбда-функции однострочного выражения
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
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