Freigeben über


Vorgehensweise: Erstellen eines Lambda-Ausdrucks (Visual Basic)

Ein Lambda-Ausdruck ist eine Funktion oder Unterroutine, die keinen Namen hat. Ein Lambdaausdruck kann überall verwendet werden, wo ein Delegattyp gültig ist.

So erstellen Sie eine einzeilige Lambda-Expressionsfunktion

  1. Geben Sie in jeder Situation, in der ein Delegattyp verwendet werden kann, das Schlüsselwort Functionein, wie im folgenden Beispiel gezeigt:

    Dim add1 = Function

  2. Geben Sie in Klammern direkt hinterher Functiondie Parameter der Funktion ein. Beachten Sie, dass Sie nach Function keinen Namen angeben.

    Dim add1 = Function (num As Integer)

  3. Geben Sie nach der Parameterliste einen einzelnen Ausdruck als Textkörper der Funktion ein. Der Wert, für den der Ausdruck ausgewertet wird, ist der von der Funktion zurückgegebene Wert. Sie verwenden keine As-Klausel, um den Rückgabetyp anzugeben.

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

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

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Alternativ wird dasselbe Ergebnis durch das folgende Beispiel erreicht:

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

So erstellen Sie eine einzeilige Lambdaausdrucks-Unterroutine

  1. Geben Sie in jeder Situation, in der ein Delegattyp verwendet werden kann, das Schlüsselwort Subein, wie im folgenden Beispiel gezeigt.

    Dim add1 = Sub

  2. Geben Sie in Klammern direkt hinterher Subdie Parameter der Unterroutine ein. Beachten Sie, dass Sie nach Sub keinen Namen angeben.

    Dim add1 = Sub (msg As String)

  3. Geben Sie nach der Parameterliste eine einzelne Anweisung als Textkörper 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 Lambdaausdrucksfunktion

  1. Geben Sie in jeder Situation, in der ein Delegattyp verwendet werden kann, das Schlüsselwort Functionein, wie im folgenden Beispiel gezeigt.

    Dim add1 = Function

  2. Geben Sie in Klammern direkt hinterher Functiondie Parameter der Funktion ein. Beachten Sie, dass Sie nach Function keinen Namen angeben.

    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 Textkörper 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 anzugeben.

    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 Integer-Argument übergeben.

    Dim sortColumn = getSortColumn(0)
    

So erstellen Sie eine mehrzeilige Lambdaausdrucks-Unterroutine

  1. Geben Sie in jeder Situation, in der ein Delegattyp verwendet werden kann, das Schlüsselwort Subein, wie im folgenden Beispiel gezeigt:

    Dim add1 = Sub

  2. Geben Sie in Klammern direkt hinterher Subdie Parameter der Unterroutine ein. Beachten Sie, dass Sie nach Sub keinen Namen angeben.

    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 Textkörper der Funktion den folgenden Code hinzu, der ausgeführt werden soll, wenn die Unterroutine aufgerufen wird.

    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 besteht darin, eine Funktion zu definieren, die als Argument für einen Parameter übergeben werden kann, dessen Typ lautet Delegate. Im folgenden Beispiel gibt die GetProcesses Methode ein Array der Prozesse zurück, die auf dem lokalen Computer ausgeführt werden. Die Where-Methode aus der Enumerable-Klasse erfordert ein Boolean-Delegat als Argument. Der Lambda-Ausdruck im Beispiel wird zu diesem Zweck verwendet. Es wird für jeden Prozess, der nur einen Thread enthält, zurückgegeben True, und diese werden in 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 entspricht dem folgenden Code, der in Language-Integrated Query (LINQ)-Syntax geschrieben wird:

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