Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett lambda-uttryck är en funktion eller underrutin som inte har något namn. Ett lambda-uttryck kan användas varhelst en ombudstyp är giltig.
Skapa en enkelradig lambda-uttrycksfunktion
I alla situationer där en ombudstyp kan användas skriver du nyckelordet
Function, som i följande exempel:Dim add1 =FunctionI parenteser, direkt efter
Function, skriver du parametrarna för funktionen. Observera att du inte anger något namn efterFunction.Dim add1 = Function(num As Integer)Efter parameterlistan skriver du ett enda uttryck som brödtext för funktionen. Värdet som uttrycket utvärderas till är det värde som returneras av funktionen. Du använder inte en
Assats för att ange returtypen.Dim add1 = Function(num As Integer) num + 1Du använder lambda-uttrycket genom att ange ett heltalsargument.
' The following line prints 6. Console.WriteLine(add1(5))Du kan också uppnå samma resultat med följande metod.
Console.WriteLine((Function(num As Integer) num + 1)(5))
Så här skapar du en enkelrads lambda-uttrycksunderrutin
I alla situationer där en ombudstyp kan användas skriver du nyckelordet
Sub, som du ser i följande exempel.Dim add1 =SubI parenteser, direkt efter
Sub, skriver du parametrarna för underrutinen. Observera att du inte anger något namn efterSub.Dim add1 = Sub(msg As String)Efter parameterlistan skriver du en enda instruktion som brödtext i underrutinen.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)Du anropar lambda-uttrycket genom att skicka in ett strängargument.
' The following line prints "Hello". writeMessage("Hello")
Skapa en lambda-uttrycksfunktion med flera linjer
I alla situationer där en ombudstyp kan användas skriver du nyckelordet
Function, som du ser i följande exempel.Dim add1 =FunctionI parenteser, direkt efter
Function, skriver du parametrarna för funktionen. Observera att du inte anger något namn efterFunction.Dim add1 = Function(index As Integer)Tryck på RETUR. Utsagan
End Functionläggs till automatiskt.I brödtexten i funktionen lägger du till följande kod för att skapa ett uttryck och returnera värdet. Du använder inte en
Assats för att ange returtypen.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 FunctionDu använder lambda-uttrycket genom att ange ett heltalsargument.
Dim sortColumn = getSortColumn(0)
Skapa ett flerradigt lambda-uttryck subrutin
I alla situationer där en ombudstyp kan användas skriver du nyckelordet
Sub, som du ser i följande exempel:Dim add1 =SubI parenteser, direkt efter
Sub, skriver du parametrarna för underrutinen. Observera att du inte anger något namn efterSub.Dim add1 = Sub(msg As String)Tryck på RETUR. Utsagan
End Subläggs till automatiskt.I brödtexten i funktionen lägger du till följande kod som ska köras när underrutinen anropas.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End SubDu anropar lambda-uttrycket genom att skicka in ett strängargument.
writeToLog("Application started.")
Exempel
En vanlig användning av lambda-uttryck är att definiera en funktion som kan skickas som argument för en parameter vars typ är Delegate. I följande exempel GetProcesses returnerar metoden en matris med de processer som körs på den lokala datorn. Metoden Where från klassen Enumerable kräver en Boolean delegat som argument. Lambda-uttrycket i exemplet används för det ändamålet. Den returnerar True för varje process som bara har en tråd, och de är markerade i filteredList.
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
Föregående exempel motsvarar följande kod, som är skriven i Language-Integrated Query -syntax (LINQ):
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