函数表达式 (Visual Basic)

声明定义函数 lambda 表达式的参数和代码。

语法

Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
  [ statements ]
End Function

部件

术语 定义
parameterlist 可选。 表示此过程参数的本地变量名称的列表。 即使列表为空,括号也必须存在。 请参阅 参数列表
expression 必填。 单个表达式。 表达式的类型是函数的返回类型。
statements 必填。 使用 Return 语句返回值的语句列表。 (请参阅 Return 语句。返回的值的类型是函数的返回类型。

注解

lambda 表达式是一个不带名称的函数,用于计算并返回值。 可以在任意位置使用 lambda 表达式,除了作为参数之外 RemoveHandler,还可以在任意位置使用委托类型。 有关委托以及将 lambda 表达式与委托一起使用的详细信息,请参阅 Delegate 语句放宽委托转换

Lambda 表达式语法

lambda 表达式的语法类似于标准函数的语法。 区别如下:

  • lambda 表达式没有名称。

  • Lambda 表达式不能有修饰符,例如 OverloadsOverrides

  • Lambda 表达式不使用 As 子句来指定函数的返回类型。 而是从单行 lambda 表达式的主体计算结果的值或多行 lambda 表达式的返回值推断类型。 例如,如果单行 lambda 表达式的正文为 Where cust.City = "London",则返回类型为 Boolean

  • 单行 lambda 表达式的主体必须是表达式,而不是语句。 正文可以包含对函数过程的调用,但不能包含对子过程的调用。

  • 所有参数都必须具有指定的数据类型,或者必须推断所有参数。

  • 不允许使用可选参数和 Paramarray 参数。

  • 不允许使用泛型参数。

示例 1

以下示例演示了创建简单 lambda 表达式的两种方法。 第一个使用 A Dim 为函数提供名称。 若要调用函数,请向参数发送值。

Dim add1 = Function(num As Integer) num + 1
' The following line prints 6.
Console.WriteLine(add1(5))

示例 2

或者,可以同时声明并运行函数。

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

示例 3

下面是 lambda 表达式的一个示例,该表达式递增其参数并返回值。 该示例演示函数的单行和多行 lambda 表达式语法。 有关更多示例,请参阅 Lambda 表达式

Dim increment1 = Function(x) x + 1
Dim increment2 = Function(x)
                     Return x + 2
                 End Function

' Write the value 2.
Console.WriteLine(increment1(1))

' Write the value 4.
Console.WriteLine(increment2(2))

示例 4

Lambda 表达式为 Language-Integrated Query(LINQ)中的许多查询运算符提供基础,并且可以在基于方法的查询中显式使用。 以下示例演示典型的 LINQ 查询,后跟查询转换为方法格式。

Dim londonCusts = From cust In db.Customers
                       Where cust.City = "London"
                       Select cust

' This query is compiled to the following code:
Dim londonCusts = db.Customers.
                  Where(Function(cust) cust.City = "London").
                  Select(Function(cust) cust)

有关查询方法的详细信息,请参阅 查询。 有关标准查询运算符的详细信息,请参阅 标准查询运算符概述

另请参阅