Lambda 運算式是沒有名稱的函式或子程式。 在任何委派類型適用的地方,都可以使用 lambda 運算式。
建立單行 Lambda 運算式函式
在可以使用委派類型的任何情況下,輸入 關鍵詞
Function,如下列範例所示:Dim add1 =Function在括弧中,直接在
Function後面輸入函式的參數。 請注意,您沒有在Function之後指定名稱。Dim add1 = Function(num As Integer)在參數清單之後,輸入單一表達式做為函式的主體。 表達式評估為的值是函式所傳回的值。 您不使用
As子句來指定傳回型別。Dim add1 = Function(num As Integer) num + 1您可以傳入整數自變數來呼叫 Lambda 表達式。
' The following line prints 6. Console.WriteLine(add1(5))或者,下列範例會完成相同的結果:
Console.WriteLine((Function(num As Integer) num + 1)(5))
建立單行 Lambda 運算式子程式
在可以使用委派類型的任何情況下,輸入 關鍵詞
Sub,如下列範例所示。Dim add1 =Sub在括弧中,直接在
Sub後面輸入子程序的參數。 請注意,您沒有在Sub之後指定名稱。Dim add1 = Sub(msg As String)在參數清單之後,輸入單一語句做為子程序主體。
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)您可以傳入字串自變數來呼叫 Lambda 表達式。
' The following line prints "Hello". writeMessage("Hello")
建立多行 Lambda 表達式的函數
在可以使用委派類型的任何情況下,輸入 關鍵詞
Function,如下列範例所示。Dim add1 =Function在括弧中,直接在
Function後面輸入函式的參數。 請注意,您沒有在Function之後指定名稱。Dim add1 = Function(index As Integer)按 ENTER 鍵。 會自動新增
End Function語句。在函式主體內,新增下列程式代碼以建立表達式並傳回值。 您不使用
As子句來指定傳回型別。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您可以傳入整數自變數來呼叫 Lambda 表達式。
Dim sortColumn = getSortColumn(0)
建立多行 Lambda 運算式子程式
在可以使用委派類型的任何情況下,輸入 關鍵詞
Sub,如下列範例所示:Dim add1 =Sub在括弧中,直接在
Sub後面輸入子程序的參數。 請注意,您沒有在Sub之後指定名稱。Dim add1 = Sub(msg As String)按 ENTER 鍵。 會自動新增
End Sub語句。在函式主體內,新增下列程序代碼,以在叫用子程式時執行。
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub您可以傳入字串自變數來呼叫 Lambda 表達式。
writeToLog("Application started.")
範例
Lambda 表達式的常見用法是定義函式,該函式可以當做類型為 Delegate的參數自變數傳入。 在下列範例中, GetProcesses 方法會傳回在本機計算機上執行之進程的陣列。 類別 Where 中的 Enumerable 方法需要 Boolean 委派做為其自變數。 此範例中的 Lambda 運算式會用於該用途。 它會針對每個只有一個線程的進程傳回 True,這些進程會在 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
上述範例相當於下列程式代碼,此程式代碼是以 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