共用方式為


如何:建立 Lambda 表達式 (Visual Basic)

Lambda 運算式是沒有名稱的函式或子程式。 在任何委派類型適用的地方,都可以使用 lambda 運算式。

建立單行 Lambda 運算式函式

  1. 在可以使用委派類型的任何情況下,輸入 關鍵詞 Function,如下列範例所示:

    Dim add1 = Function

  2. 在括弧中,直接在 Function 後面輸入函式的參數。 請注意,您沒有在Function之後指定名稱。

    Dim add1 = Function (num As Integer)

  3. 在參數清單之後,輸入單一表達式做為函式的主體。 表達式評估為的值是函式所傳回的值。 您不使用 As 子句來指定傳回型別。

    Dim add1 = Function(num As Integer) num + 1
    

    您可以傳入整數自變數來呼叫 Lambda 表達式。

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. 或者,下列範例會完成相同的結果:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

建立單行 Lambda 運算式子程式

  1. 在可以使用委派類型的任何情況下,輸入 關鍵詞 Sub,如下列範例所示。

    Dim add1 = Sub

  2. 在括弧中,直接在Sub後面輸入子程序的參數。 請注意,您沒有在Sub之後指定名稱。

    Dim add1 = Sub (msg As String)

  3. 在參數清單之後,輸入單一語句做為子程序主體。

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    您可以傳入字串自變數來呼叫 Lambda 表達式。

    ' The following line prints "Hello".
    writeMessage("Hello")
    

建立多行 Lambda 表達式的函數

  1. 在可以使用委派類型的任何情況下,輸入 關鍵詞 Function,如下列範例所示。

    Dim add1 = Function

  2. 在括弧中,直接在 Function 後面輸入函式的參數。 請注意,您沒有在Function之後指定名稱。

    Dim add1 = Function (index As Integer)

  3. 按 ENTER 鍵。 會自動新增 End Function 語句。

  4. 在函式主體內,新增下列程式代碼以建立表達式並傳回值。 您不使用 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 運算式子程式

  1. 在可以使用委派類型的任何情況下,輸入 關鍵詞 Sub,如下列範例所示:

    Dim add1 = Sub

  2. 在括弧中,直接在Sub後面輸入子程序的參數。 請注意,您沒有在Sub之後指定名稱。

    Dim add1 = Sub (msg As String)

  3. 按 ENTER 鍵。 會自動新增 End Sub 語句。

  4. 在函式主體內,新增下列程序代碼,以在叫用子程式時執行。

    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

另請參閱