Gewusst wie: Erstellen eines Lambdaausdrucks (Visual Basic)
Ein Lambdaausdruck 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 Lambdaausdrucksfunktion
Wenn ein Delegattyp verwendet werden kann, geben Sie wie im folgenden Beispiel das Schlüsselwort
Function
ein:Dim add1 =
Function
Geben Sie direkt nach
Function
in Klammern die Parameter der Funktion ein. NachFunction
wird kein Name angegeben.Dim add1 = Function
(num As Integer)
Geben Sie nach der Parameterliste einen einzelnen Ausdruck als Textkörper der Funktion ein. Der Wert, als welcher der Ausdruck ausgewertet wird, ist der von der Funktion zurückgegebene Wert. Es wird keine
As
-Klausel verwendet, um den Rückgabetyp anzugeben.Dim add1 = Function(num As Integer) num + 1
Der Lambdaausdruck wird aufgerufen, indem ein ganzzahliges Argument übergeben wird.
' The following line prints 6. Console.WriteLine(add1(5))
Alternativ wird das gleiche Ergebnis durch das folgende Beispiel erreicht:
Console.WriteLine((Function(num As Integer) num + 1)(5))
So erstellen Sie eine einzeilige Lambdaausdrucks-Unterroutine
Wenn ein Delegattyp verwendet werden kann, geben Sie wie im folgenden Beispiel das Schlüsselwort
Sub
ein.Dim add1 =
Sub
Geben Sie direkt nach
Sub
in Klammern die Parameter der Unterroutine ein. NachSub
wird kein Name angegeben.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)
Der Lambdaausdruck wird aufgerufen, indem ein Zeichenfolgenargument übergeben wird.
' The following line prints "Hello". writeMessage("Hello")
So erstellen Sie eine mehrzeilige Lambdaausdrucksfunktion
Wenn ein Delegattyp verwendet werden kann, geben Sie wie im folgenden Beispiel das Schlüsselwort
Function
ein.Dim add1 =
Function
Geben Sie direkt nach
Function
in Klammern die Parameter der Funktion ein. NachFunction
wird kein Name angegeben.Dim add1 = Function
(index As Integer)
Drücken Sie die EINGABETASTE. Die
End Function
-Anweisung wird automatisch hinzugefügt.Fügen Sie im Textkörper der Funktion den folgenden Code hinzu, um einen Ausdruck zu erstellen und den Wert zurückzugeben. Es wird keine
As
-Klausel verwendet, 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
Der Lambdaausdruck wird aufgerufen, indem ein ganzzahliges Argument übergeben wird.
Dim sortColumn = getSortColumn(0)
So erstellen Sie eine mehrzeilige Lambdaausdrucks-Unterroutine
Wenn ein Delegattyp verwendet werden kann, geben Sie wie im folgenden Beispiel das Schlüsselwort
Sub
ein:Dim add1 =
Sub
Geben Sie direkt nach
Sub
in Klammern die Parameter der Unterroutine ein. NachSub
wird kein Name angegeben.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 ausgeführt wird, 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
Der Lambdaausdruck wird aufgerufen, indem ein Zeichenfolgenargument übergeben wird.
writeToLog("Application started.")
Beispiel
Lambdaausdrücke werden häufig verwendet, um eine Funktion zu definieren, die als Argument für einen Parameter vom Typ Delegate
übergeben werden kann. 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 Lambdaausdruck im Beispiel wird zu diesem Zweck verwendet. Für jeden Prozess, der nur über einen Thread verfügt, wird True
zurückgegeben 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 LINQ-Syntax (Language-Integrated Query) geschrieben ist:
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