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
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
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)
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))
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
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
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)
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
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
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)
Drücken Sie die EINGABETASTE.Die End Function-Anweisung wird automatisch hinzugefügt.
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
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
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)
Drücken Sie die EINGABETASTE.Die End Sub-Anweisung wird automatisch hinzugefügt.
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)
Konzepte
Lambda-Ausdrücke (Visual Basic)
Einführung in LINQ in Visual Basic