Gewusst wie: Erstellen eines Lambda-Ausdrucks (Visual Basic)

Ein Lambda-Ausdruck ist eine Funktion oder Unterroutine, die keinen Namen aufweist. Lambda-Ausdrücke können an allen Stellen verwendet werden, an denen ein Delegattyp gültig ist.

So erstellen Sie eine einzeilige Funktion mit einem Lambda-Ausdruck

  1. Geben Sie in einer Situation, in der ein Delegattyp verwendet werden kann, wie im folgenden Beispiel veranschaulicht, das Schlüsselwort Function ein:

    Dim add1 = Function

  2. Geben Sie direkt nach Function in Klammern die Parameter der Funktion ein. Beachten Sie, dass nach Function kein Name festgelegt wird.

    Dim add1 = Function (num As Integer)

  3. Geben Sie nach der Parameterliste einen einzelnen Ausdruck als Text der Funktion ein. Der Wert, den der Ausdruck ergibt, wird von der Funktion zurückgegeben. Sie verwenden keine As-Klausel, um den Rückgabetyp festzulegen.

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

    Sie rufen den Lambda-Ausdruck auf, indem Sie ein Ganzzahlargument übergeben.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Das gleiche Ergebnis wird auch in folgendem Beispiel erreicht:

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

So erstellen Sie eine einzeilige Unterroutine mit einem Lambda-Ausdruck

  1. Geben Sie in einer Situation, in der ein Delegattyp verwendet werden kann, wie im folgenden Beispiel veranschaulicht, das Schlüsselwort Sub ein:

    Dim add1 = Sub

  2. Geben Sie direkt nach Sub in Klammern die Parameter der Unterroutine ein. Beachten Sie, dass nach Sub kein Name festgelegt wird.

    Dim add1 = Sub (msg As String)

  3. Geben Sie nach der Parameterliste eine einzelne Anweisung als Text der Unterroutine ein.

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

    Sie rufen den Lambda-Ausdruck auf, indem Sie ein Zeichenfolgenargument übergeben.

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

So erstellen Sie eine mehrzeilige Funktion mit einem Lambda-Ausdruck

  1. Geben Sie in einer Situation, in der ein Delegattyp verwendet werden kann, wie im folgenden Beispiel veranschaulicht, das Schlüsselwort Function ein:

    Dim add1 = Function

  2. Geben Sie direkt nach Function in Klammern die Parameter der Funktion ein. Beachten Sie, dass nach Function kein Name festgelegt wird.

    Dim add1 = Function (index As Integer)

  3. Drücken Sie die EINGABETASTE. Die End Function-Anweisung wird automatisch hinzugefügt.

  4. Fügen Sie im Text der Funktion den folgenden Code hinzu, um einen Ausdruck zu erstellen und den Wert zurückzugeben. Sie verwenden keine As-Klausel, um den Rückgabetyp festzulegen.

    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
    

    Sie rufen den Lambda-Ausdruck auf, indem Sie ein Ganzzahlargument übergeben.

    Dim sortColumn = getSortColumn(0)
    

So erstellen Sie eine mehrzeilige Unterroutine mit einem Lambda-Ausdruck

  1. Geben Sie in einer Situation, in der ein Delegattyp verwendet werden kann, wie im folgenden Beispiel veranschaulicht, das Schlüsselwort Sub ein:

    Dim add1 = Sub

  2. Geben Sie direkt nach Sub in Klammern die Parameter der Unterroutine ein. Beachten Sie, dass nach Sub kein Name festgelegt wird.

    Dim add1 = Sub(msg As String)

  3. Drücken Sie die EINGABETASTE. Die End Sub-Anweisung wird automatisch hinzugefügt.

  4. Fügen Sie im Text der Funktion den folgenden Code hinzu, der beim Aufrufen der Unterroutine ausgeführt werden soll.

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

    Sie rufen den Lambda-Ausdruck auf, indem Sie ein Zeichenfolgenargument übergeben.

    writeToLog("Application started.")
    

Beispiel

Eine häufige Verwendung von Lambda-Ausdrücken ist das Definieren einer Funktion, die als Argument für einen Parameter vom Typ Delegate übergeben werden kann. Im folgenden Beispiel wird von der GetProcesses-Methode ein Array der Prozesse zurückgegeben, die auf dem lokalen Computer ausgeführt werden. Für die Where-Methode der Enumerable-Klasse ist ein Boolean-Delegat als Argument erforderlich. Zu diesem Zweck wird im Beispiel der Lambda-Ausdruck verwendet. Er gibt True für alle Prozesse mit nur einem Thread zurück, und diese werden in der filteredList ausgewählt.

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

Das vorherige Beispiel ist äquivalent zu folgendem, in Sprachintegrierte Abfrage (Language-Integrated Query, LINQ)-Syntax geschriebenem Code:

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

Siehe auch

Aufgaben

Gewusst wie: Übergeben von Prozeduren an eine andere Prozedur in Visual Basic

Referenz

Function-Anweisung (Visual Basic)

Sub-Anweisung (Visual Basic)

Delegate-Anweisung

Enumerable

Konzepte

Lambda-Ausdrücke (Visual Basic)

Einführung in LINQ in Visual Basic

Weitere Ressourcen

Delegaten (Visual Basic)