Dela via


Gör så här: Skapa ett Lambda-uttryck (Visual Basic)

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 lambda-uttrycksfunktion med en rad

  1. I alla situationer där en ombudstyp kan användas skriver du nyckelordet Function, som i följande exempel:

    Dim add1 = Function

  2. I parenteser, direkt efter Function, skriver du parametrarna för funktionen. Observera att du inte anger något namn efter Function.

    Dim add1 = Function (num As Integer)

  3. 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 As sats för att ange returtypen.

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

    Du anropar lambda-uttrycket genom att skicka in ett heltalsargument.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Du kan också göra samma resultat i följande exempel:

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

Så här skapar du en enkelrads lambda-uttrycksunderrutin

  1. I alla situationer där en ombudstyp kan användas skriver du nyckelordet Sub, som du ser i följande exempel.

    Dim add1 = Sub

  2. I parenteser, direkt efter Sub, skriver du parametrarna för underrutinen. Observera att du inte anger något namn efter Sub.

    Dim add1 = Sub (msg As String)

  3. 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

  1. I alla situationer där en ombudstyp kan användas skriver du nyckelordet Function, som du ser i följande exempel.

    Dim add1 = Function

  2. I parenteser, direkt efter Function, skriver du parametrarna för funktionen. Observera att du inte anger något namn efter Function.

    Dim add1 = Function (index As Integer)

  3. Tryck på Retur. -instruktionen End Function läggs till automatiskt.

  4. 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 As sats 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 Function
    

    Du anropar lambda-uttrycket genom att skicka in ett heltalsargument.

    Dim sortColumn = getSortColumn(0)
    

Så här skapar du ett lambda-uttryck med flera linjer underuttryck

  1. I alla situationer där en ombudstyp kan användas skriver du nyckelordet Sub, som du ser i följande exempel:

    Dim add1 = Sub

  2. I parenteser, direkt efter Sub, skriver du parametrarna för underrutinen. Observera att du inte anger något namn efter Sub.

    Dim add1 = Sub (msg As String)

  3. Tryck på Retur. -instruktionen End Sub läggs till automatiskt.

  4. 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 Sub
    

    Du 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 Enumerable klassen kräver ett Boolean ombud 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 LINQ-syntax (Language-Integrated Query):

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

Se även