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