Udostępnij za pośrednictwem


Jak: Tworzenie wyrażenia lambda (Visual Basic)

Wyrażenie lambda jest funkcją lub procedurą, która nie ma nazwy. Wyrażenie lambda może być używane wszędzie tam, gdzie typ delegata jest prawidłowy.

Aby utworzyć funkcję wyrażenia lambda jednowierszowego

  1. W każdej sytuacji, w której można użyć typu delegata, wpisz słowo kluczowe Function, jak w poniższym przykładzie:

    Dim add1 = Function

  2. W nawiasach, bezpośrednio po Function, wpisz parametry funkcji. Zwróć uwagę, że nie określasz nazwy po Function.

    Dim add1 = Function (num As Integer)

  3. Po liście parametrów wpisz pojedyncze wyrażenie jako treść funkcji. Wartość obliczona przez wyrażenie to wartość zwracana przez funkcję. Nie używasz klauzuli As , aby określić typ zwracany.

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

    Aby wywołać wyrażenie lambda, przekaż argument liczby całkowitej.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Alternatywnie ten sam wynik jest osiągany przez następujący przykład:

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

Aby utworzyć podprogram wyrażenia lambda jednowierszowego

  1. W każdej sytuacji, w której można użyć typu delegata, wpisz słowo kluczowe Sub, jak pokazano w poniższym przykładzie.

    Dim add1 = Sub

  2. W nawiasach, bezpośrednio po Sub, wpisz parametry podprogramu. Zwróć uwagę, że nie określasz nazwy po Sub.

    Dim add1 = Sub (msg As String)

  3. Po liście parametrów wpisz pojedynczą instrukcję jako treść podroutyny.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    Wywołujesz wyrażenie lambda, przekazując argument typu string.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

Do stworzenia funkcji wyrażenia lambda wielowierszowego

  1. W każdej sytuacji, w której można użyć typu delegata, wpisz słowo kluczowe Function, jak pokazano w poniższym przykładzie.

    Dim add1 = Function

  2. W nawiasach, bezpośrednio po Function, wpisz parametry funkcji. Zwróć uwagę, że nie określasz nazwy po Function.

    Dim add1 = Function (index As Integer)

  3. Naciśnij ENTER. Instrukcja End Function jest dodawana automatycznie.

  4. W treści funkcji dodaj następujący kod, aby utworzyć wyrażenie i zwrócić wartość. Nie używasz klauzuli As , aby określić typ zwracany.

    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
    

    Aby wywołać wyrażenie lambda, przekaż argument liczby całkowitej.

    Dim sortColumn = getSortColumn(0)
    

Aby utworzyć podkretywę wyrażenia lambda wielowierszowego

  1. W każdej sytuacji, w której można użyć typu delegata, wpisz słowo kluczowe Sub, jak pokazano w poniższym przykładzie:

    Dim add1 = Sub

  2. W nawiasach, bezpośrednio po Sub, wpisz parametry podprogramu. Zwróć uwagę, że nie określasz nazwy po Sub.

    Dim add1 = Sub (msg As String)

  3. Naciśnij ENTER. Instrukcja End Sub jest dodawana automatycznie.

  4. W treści funkcji dodaj następujący kod, który ma zostać wykonany po wywołaniu podroutyny.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Wywołujesz wyrażenie lambda, przekazując argument typu string.

    writeToLog("Application started.")
    

Przykład

Typowym zastosowaniem wyrażeń lambda jest zdefiniowanie funkcji, która może zostać przekazana jako argument parametru, którego typem jest Delegate. W poniższym przykładzie GetProcesses metoda zwraca tablicę procesów uruchomionych na komputerze lokalnym. Metoda Where z Enumerable klasy wymaga delegata Boolean jako argumentu. Wyrażenie lambda w przykładzie jest używane w tym celu. Zwraca True dla każdego procesu, który ma tylko jeden wątek, a te są wybierane w elemencie 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

Poprzedni przykład jest odpowiednikiem następującego kodu, który jest napisany w składni Language-Integrated Query (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

Zobacz także