Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Výraz lambda je funkce nebo podprogram, který nemá název. Výraz lambda lze použít všude, kde je typ delegáta platný.
Vytvoření jednořádkové funkce výrazu lambda
V jakékoli situaci, kdy je možné použít typ delegáta, zadejte klíčové slovo
Function, jako v následujícím příkladu:Dim add1 =FunctionV závorkách zadejte přímo za
Functionparametry funkce. Všimněte si, že nezadáte název zaFunction.Dim add1 = Function(num As Integer)Za seznamem parametrů zadejte jeden výraz jako tělo funkce. Hodnota, na kterou se výraz vyhodnotí, je hodnota vrácená funkcí. Klauzuli nepoužíváte
Ask určení návratového typu.Dim add1 = Function(num As Integer) num + 1Výraz lambda zavoláte předáním celočíselného argumentu.
' The following line prints 6. Console.WriteLine(add1(5))Stejný výsledek lze provést v následujícím příkladu:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Vytvoření podprogramu výrazu lambda s jedním řádkem
V jakékoli situaci, kdy lze použít typ delegáta, zadejte klíčové slovo
Sub, jak je znázorněno v následujícím příkladu.Dim add1 =SubV závorkách zadejte přímo za
Subparametry podprogramu. Všimněte si, že nezadáte název zaSub.Dim add1 = Sub(msg As String)Za seznamem parametrů zadejte jeden příkaz jako tělo podprogramu.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)Výraz lambda zavoláte předáním řetězcového argumentu.
' The following line prints "Hello". writeMessage("Hello")
Vytvoření víceřádkové funkce výrazu lambda
V jakékoli situaci, kdy lze použít typ delegáta, zadejte klíčové slovo
Function, jak je znázorněno v následujícím příkladu.Dim add1 =FunctionV závorkách zadejte přímo za
Functionparametry funkce. Všimněte si, že nezadáte název zaFunction.Dim add1 = Function(index As Integer)Stiskněte enter. Příkaz
End Functionse přidá automaticky.Do těla funkce přidejte následující kód, který vytvoří výraz a vrátí hodnotu. Klauzuli nepoužíváte
Ask určení návratového typu.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 FunctionVýraz lambda zavoláte předáním celočíselného argumentu.
Dim sortColumn = getSortColumn(0)
Vytvořit podprogram vícřádkového výrazu lambda
V jakékoli situaci, kdy je možné použít typ delegáta, zadejte klíčové slovo
Sub, jak je znázorněno v následujícím příkladu:Dim add1 =SubV závorkách zadejte přímo za
Subparametry podprogramu. Všimněte si, že nezadáte název zaSub.Dim add1 = Sub(msg As String)Stiskněte enter. Příkaz
End Subse přidá automaticky.Do těla funkce přidejte následující kód, který se spustí při vyvolání podprogramu.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End SubVýraz lambda zavoláte předáním řetězcového argumentu.
writeToLog("Application started.")
Příklad
Běžným použitím výrazů lambda je definovat funkci, která se dá předat jako argument pro parametr, jehož typ je Delegate. V následujícím příkladu GetProcesses vrátí metoda pole procesů spuštěných v místním počítači. Metoda Where z Enumerable třídy vyžaduje Boolean jako argument delegáta. Výraz lambda v příkladu se pro tento účel používá. Vrátí True pro každý proces, který má pouze jedno vlákno, a ty jsou vybrány v 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
Předchozí příklad je ekvivalentní následujícímu kódu, který je napsaný v syntaxi 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