Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Лямбда-выражение — это функция или подпрограмма, которая не имеет имени. Лямбда-выражение можно использовать везде, где подходит тип делегата.
Создание лямбда-функции однострочного выражения
В любой ситуации, когда можно использовать тип делегата, введите ключевое слово
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