Gewusst wie: Erstellen eines Lambda-Ausdrucks
Aktualisiert: November 2007
Ein Lambda-Ausdruck ist eine Funktion ohne Namen, von der ein einzelner Ausdruck ausgewertet und dessen Wert zurückgegeben wird.
So erstellen Sie einen Lambda-Ausdruck
Geben Sie innerhalb einer Methode in jeder Situation, in der ein Delegattyp verwendet werden kann, das Schlüsselwort Function ein, wie in folgendem Beispiel:
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))
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 übergeben. Er gibt True für alle Prozesse mit nur einem Thread zurück, und diese werden in der filteredQuery 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
Konzepte
Delegaten und der AddressOf-Operator
Einführung in LINQ in Visual Basic