Практическое руководство. Создать лямбда-выражения (Visual Basic)How to: Create a Lambda Expression (Visual Basic)

Объект лямбда-выражение функцию или подпрограмму, которая не имеет имени.A lambda expression is a function or subroutine that does not have a name. Лямбда-выражение может использоваться везде, где допустим тип делегата.A lambda expression can be used wherever a delegate type is valid.

Чтобы создать функцию однострочное лямбда-выраженияTo create a single-line lambda expression function

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое слово Function, как показано в следующем примере:In any situation where a delegate type could be used, type the keyword Function, as in the following example:

    Dim add1 = FunctionDim add1 = Function

  2. В скобках сразу после Function, введите параметры функции.In parentheses, directly after Function, type the parameters of the function. Обратите внимание на то, что не нужно указывать имя после Function.Notice that you do not specify a name after Function.

    Dim add1 = Function (num As Integer)Dim add1 = Function (num As Integer)

  3. Список параметров введите одно выражение в теле функции.Following the parameter list, type a single expression as the body of the function. Выражение, результатом которого является значение является значением, возвращаемым функцией.The value that the expression evaluates to is the value returned by the function. Вы не используете As предложение, чтобы указать тип возвращаемого значения.You do not use an As clause to specify the return type.

    Dim add1 = Function(num As Integer) num + 1
    

    Лямбда-выражение вызывается путем передачи в целочисленный аргумент.You call the lambda expression by passing in an integer argument.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Кроме того в следующем примере выполняется тот же результат:Alternatively, the same result is accomplished by the following example:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

Создание подпрограммы однострочное лямбда-выраженияTo create a single-line lambda expression subroutine

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое слово Sub, как показано в следующем примере.In any situation where a delegate type could be used, type the keyword Sub, as shown in the following example.

    Dim add1 = SubDim add1 = Sub

  2. В скобках сразу после Sub, введите параметры подпрограммы.In parentheses, directly after Sub, type the parameters of the subroutine. Обратите внимание на то, что не нужно указывать имя после Sub.Notice that you do not specify a name after Sub.

    Dim add1 = Sub (msg As String)Dim add1 = Sub (msg As String)

  3. Список параметров введите одной инструкции в теле подпрограммы.Following the parameter list, type a single statement as the body of the subroutine.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    Лямбда-выражение вызывается путем передачи аргумента строки.You call the lambda expression by passing in a string argument.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

Для создания многострочных лямбда-выражение функцииTo create a multiline lambda expression function

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое слово Function, как показано в следующем примере.In any situation where a delegate type could be used, type the keyword Function, as shown in the following example.

    Dim add1 = FunctionDim add1 = Function

  2. В скобках сразу после Function, введите параметры функции.In parentheses, directly after Function, type the parameters of the function. Обратите внимание на то, что не нужно указывать имя после Function.Notice that you do not specify a name after Function.

    Dim add1 = Function (index As Integer)Dim add1 = Function (index As Integer)

  3. Нажмите клавишу ВВОД.Press ENTER. End Function Автоматически добавляется инструкция.The End Function statement is automatically added.

  4. В теле функции добавьте следующий код, чтобы создать выражение и возвращают значение.Within the body of the function, add the following code to create an expression and return the value. Вы не используете As предложение, чтобы указать тип возвращаемого значения.You do not use an As clause to specify the return type.

    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
    

    Лямбда-выражение вызывается путем передачи в целочисленный аргумент.You call the lambda expression by passing in an integer argument.

    Dim sortColumn = getSortColumn(0)
    

Создание выражения подпрограммы многострочного лямбда-выраженияTo create a multiline lambda expression subroutine

  1. В любой ситуации, когда можно использовать тип делегата, введите ключевое слово Sub, как показано в следующем примере:In any situation where a delegate type could be used, type the keyword Sub, as shown in the following example:

    Dim add1 = SubDim add1 = Sub

  2. В скобках сразу после Sub, введите параметры подпрограммы.In parentheses, directly after Sub, type the parameters of the subroutine. Обратите внимание на то, что не нужно указывать имя после Sub.Notice that you do not specify a name after Sub.

    Dim add1 = Sub (msg As String)Dim add1 = Sub (msg As String)

  3. Нажмите клавишу ВВОД.Press ENTER. End Sub Автоматически добавляется инструкция.The End Sub statement is automatically added.

  4. В теле функции добавьте следующий код для выполнения при вызове подпрограммы.Within the body of the function, add the following code to execute when the subroutine is invoked.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Лямбда-выражение вызывается путем передачи аргумента строки.You call the lambda expression by passing in a string argument.

    writeToLog("Application started.")
    

ПримерExample

Обычно лямбда-выражений используется для определения функции, который может передаваться в качестве аргумента для параметра, тип которого является Delegate.A common use of lambda expressions is to define a function that can be passed in as the argument for a parameter whose type is Delegate. В следующем примере GetProcesses метод возвращает массив процессов, запущенных на локальном компьютере.In the following example, the GetProcesses method returns an array of the processes running on the local computer. Where Метода из Enumerable классу Boolean делегат в качестве аргумента.The Where method from the Enumerable class requires a Boolean delegate as its argument. Лямбда-выражение в примере используется для этой цели.The lambda expression in the example is used for that purpose. Он возвращает True каждого процесса, у которой есть только один поток, а те, выбранные в filteredList.It returns True for each process that has only one thread, and those are selected in 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

Предыдущий пример эквивалентен следующий код, написанный на LINQLanguage-Integrated Query (LINQ) синтаксис:The previous example is equivalent to the following code, which is written in LINQLanguage-Integrated Query (LINQ) syntax:

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

См. такжеSee also