函数表达式 (Visual Basic)
声明定义函数 lambda 表达式的参数和代码。
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
部件
术语 |
定义 |
parameterlist |
可选。 表示此过程的参数的局部变量名称的列表。 即使该列表为空,也必须使用括号。 请参见参数列表 (Visual Basic)。 |
expression |
必选。 单个表达式。 表达式的返回类型就是函数的返回类型。 |
statements |
必选。 使用 Return 语句返回值的语句的列表。 (请参见 Return 语句 (Visual Basic)。)返回值的类型就是函数的返回类型。 |
备注
Lambda 表达式 是一种无名函数,用于计算并返回值。 可以在可使用委托类型的任何位置(除了作为 RemoveHandler 的参数)使用 lambda 表达式。 有关委托以及通过委托使用 lambda 表达式的更多信息,请参见 Delegate 语句和宽松委托转换 (Visual Basic)。
Lambda 表达式语法
Lambda 表达式的语法类似于标准函数的语法。 区别如下:
lambda 表达式没有名称。
Lambda 表达式不能有修饰符,例如 Overloads 或 Overrides。
Lambda 表达式不使用 As 子句来指定函数的返回类型。 而是,从单行 lambda 表达式体计算得出的值推断类型,或者返回多行 lambda 表达式的值。 例如,如果单行 lambda 表达式的主体为 Where cust.City = "London",则其返回类型为 Boolean。
单行 lambda 表达式的主体必须是表达式,而不是语句。 函数体可以包含对函数过程的调用,但不能包含对子过程的调用。
要么所有参数都必须具有指定的数据类型,要么必须推断所有类型。
不允许使用 Optional 和 Paramarray 参数。
不允许使用泛型参数。
示例
下面的示例演示创建简单 lambda 表达式的两种方法。 第一种方法使用 Dim 为函数提供名称。 若要调用函数,请为参数传递一个值。
Dim add1 = Function(num As Integer) num + 1
' The following line prints 6.
Console.WriteLine(add1(5))
或者,还可以同时声明和运行函数。
Console.WriteLine((Function(num As Integer) num + 1)(5))
下面是 lambda 表达式的示例,该表达式递增其参数并返回值。 该示例同时显示了一个函数的单行和多行 Lambda 表达式语法。 有关更多示例,请参见Lambda 表达式 (Visual Basic)。
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))
Lambda 表达式是 语言集成查询 (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)
有关查询方法的更多信息,请参见查询 (Visual Basic)。 有关标准查询运算符的更多信息,请参见标准查询运算符概述。