如何:创建 lambda 表达式

更新:2007 年 11 月

“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 表达式的一个常见用途是定义一个函数,该函数可作为 Delegate 类型的形参的实参进行传递。在下面的示例中,GetProcesses 方法返回在本地计算机上运行的进程的数组。Enumerable 类中的 Where 方法需要使用一个 Boolean 委托作为参数。该示例中的 lambda 表达式就是为此目的而传递的。对于每个仅有一个线程的进程以及在 filteredQuery 中选择的进程,它将返回 True。

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

上一个示例等效于下面用语言集成查询 (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

请参见

任务

如何:在 Visual Basic 中将过程传递给另一过程

概念

委托和 AddressOf 运算符

lambda 表达式

Visual Basic 中的 LINQ 简介

参考

Function 语句 (Visual Basic)

Delegate 语句

Enumerable