Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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
Aby wywołać wyrażenie lambda, przekaż argument 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ć podprogram 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 podprogramu. 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)
Wywołujesz wyrażenie lambda, przekazując argument typu string.
' The following line prints "Hello". writeMessage("Hello")
Do stworzenia funkcji 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 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
Aby wywołać wyrażenie lambda, przekaż argument 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 podprogramu. Zwróć uwagę, że nie określasz nazwy poSub
.Dim add1 = Sub
(msg As String)
Naciśnij 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
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