Procedura: Creare un'espressione Lambda (Visual Basic)How to: Create a Lambda Expression (Visual Basic)

Oggetto espressione lambda è una funzione o subroutine che non dispone di un nome.A lambda expression is a function or subroutine that does not have a name. Un'espressione lambda può essere utilizzata ogni volta che un tipo delegato è valido.A lambda expression can be used wherever a delegate type is valid.

Per creare una funzione di espressione lambda a riga singolaTo create a single-line lambda expression function

  1. In qualsiasi situazione in cui è stato utilizzato un tipo delegato, digitare la parola chiave Function, come illustrato nell'esempio seguente: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. Tra parentesi, direttamente dopo Function, digitare i parametri della funzione.In parentheses, directly after Function, type the parameters of the function. Si noti che non si specifica un nome dopo Function.Notice that you do not specify a name after Function.

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

  3. In seguito l'elenco di parametri, digitare una singola espressione come corpo della funzione.Following the parameter list, type a single expression as the body of the function. Il valore restituito dall'espressione a è il valore restituito dalla funzione.The value that the expression evaluates to is the value returned by the function. Non si usa un As clausola per specificare il tipo restituito.You do not use an As clause to specify the return type.

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

    L'espressione lambda è chiamata passando un argomento integer.You call the lambda expression by passing in an integer argument.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. In alternativa, lo stesso risultato avviene nell'esempio seguente:Alternatively, the same result is accomplished by the following example:

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

Per creare una subroutine espressione lambda a riga singolaTo create a single-line lambda expression subroutine

  1. In qualsiasi situazione in cui è stato utilizzato un tipo delegato, digitare la parola chiave Sub, come illustrato nell'esempio seguente.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. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine.In parentheses, directly after Sub, type the parameters of the subroutine. Si noti che non si specifica un nome dopo Sub.Notice that you do not specify a name after Sub.

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

  3. In seguito l'elenco di parametri, digitare una singola istruzione come corpo della subroutine.Following the parameter list, type a single statement as the body of the subroutine.

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

    L'espressione lambda è chiamata passando un argomento di tipo stringa.You call the lambda expression by passing in a string argument.

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

Per creare una funzione di espressione lambda su più righeTo create a multiline lambda expression function

  1. In qualsiasi situazione in cui è stato utilizzato un tipo delegato, digitare la parola chiave Function, come illustrato nell'esempio seguente.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. Tra parentesi, direttamente dopo Function, digitare i parametri della funzione.In parentheses, directly after Function, type the parameters of the function. Si noti che non si specifica un nome dopo Function.Notice that you do not specify a name after Function.

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

  3. Premere INVIO.Press ENTER. Il End Function istruzione viene aggiunta automaticamente.The End Function statement is automatically added.

  4. All'interno del corpo della funzione, aggiungere il codice seguente per creare un'espressione e restituire il valore.Within the body of the function, add the following code to create an expression and return the value. Non si usa un As clausola per specificare il tipo restituito.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
    

    L'espressione lambda è chiamata passando un argomento integer.You call the lambda expression by passing in an integer argument.

    Dim sortColumn = getSortColumn(0)
    

Per creare una subroutine espressione lambda su più righeTo create a multiline lambda expression subroutine

  1. In qualsiasi situazione in cui è stato utilizzato un tipo delegato, digitare la parola chiave Sub, come illustrato nell'esempio seguente: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. Tra parentesi, direttamente dopo Sub, digitare i parametri della subroutine.In parentheses, directly after Sub, type the parameters of the subroutine. Si noti che non si specifica un nome dopo Sub.Notice that you do not specify a name after Sub.

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

  3. Premere INVIO.Press ENTER. Il End Sub istruzione viene aggiunta automaticamente.The End Sub statement is automatically added.

  4. All'interno del corpo della funzione, aggiungere il seguente codice da eseguire quando viene richiamata la subroutine.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
    

    L'espressione lambda è chiamata passando un argomento di tipo stringa.You call the lambda expression by passing in a string argument.

    writeToLog("Application started.")
    

EsempioExample

Un uso comune delle espressioni lambda consiste nel definire una funzione che può essere passata come argomento per un parametro di tipo 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. Nell'esempio seguente, il GetProcesses metodo restituisce una matrice di processi in esecuzione nel computer locale.In the following example, the GetProcesses method returns an array of the processes running on the local computer. Il Where metodo dal Enumerable classe richiede un Boolean delegato come argomento.The Where method from the Enumerable class requires a Boolean delegate as its argument. L'espressione lambda nell'esempio viene utilizzata a tale scopo.The lambda expression in the example is used for that purpose. Viene restituito True per ogni processo che ha un solo thread e quelli selezionati in 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

Nell'esempio precedente è equivalente al codice seguente, che viene scritto in LINQ (Language-Integrated Query)Language-Integrated Query (LINQ) sintassi:The previous example is equivalent to the following code, which is written in LINQ (Language-Integrated Query)Language-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

Vedere ancheSee also