Porady: tworzenie wyrażenia lambda (Visual Basic)
Wyrażenie lambda jest funkcją lub podprotyną, 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
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
W nawiasach, bezpośrednio po
Function
, wpisz parametry funkcji. Zwróć uwagę, że nie określasz nazwy poFunction
.Dim add1 = Function
(num As Integer)
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
Wyrażenie lambda jest wywoływane przez przekazanie argumentu liczby całkowitej.
' The following line prints 6. Console.WriteLine(add1(5))
Alternatywnie ten sam wynik jest osiągany przez następujący przykład:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Aby utworzyć podprotynę wyrażenia lambda jednowierszowego
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
W nawiasach, bezpośrednio po
Sub
, wpisz parametry podrouty. Zwróć uwagę, że nie określasz nazwy poSub
.Dim add1 = Sub
(msg As String)
Po liście parametrów wpisz pojedynczą instrukcję jako treść podroutyny.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Wyrażenie lambda jest wywoływane przez przekazanie argumentu ciągu.
' The following line prints "Hello". writeMessage("Hello")
Aby utworzyć funkcję wyrażenia lambda wielowierszowego
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
W nawiasach, bezpośrednio po
Function
, wpisz parametry funkcji. Zwróć uwagę, że nie określasz nazwy poFunction
.Dim add1 = Function
(index As Integer)
Naciśnij klawisz ENTER. Instrukcja
End Function
jest dodawana automatycznie.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
Wyrażenie lambda jest wywoływane przez przekazanie argumentu liczby całkowitej.
Dim sortColumn = getSortColumn(0)
Aby utworzyć podkretywę wyrażenia lambda wielowierszowego
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
W nawiasach, bezpośrednio po
Sub
, wpisz parametry podrouty. Zwróć uwagę, że nie określasz nazwy poSub
.Dim add1 = Sub
(msg As String)
Naciśnij klawisz ENTER. Instrukcja
End Sub
jest dodawana automatycznie.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
Wyrażenie lambda jest wywoływane przez przekazanie argumentu ciągu.
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
on wartość dla każdego procesu, który ma tylko jeden wątek, a te są wybierane w elemecie 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 zapytań zintegrowanych z językiem (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