函数表达式
更新:2007 年 11 月
声明定义 lambda 表达式的参数和代码。
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] ) _
expression
各部分说明
parameterlist
可选。表示此过程的参数的局部变量名称的列表。即使该列表为空,也必须使用括号。请参见参数列表。expression
必需。单个表达式。该表达式的值确定函数的类型和在调用函数时返回的值。
备注
“lambda 表达式”是一种无名函数,用于计算并返回单个值。可以在可使用委托类型的任何位置(除了作为 RemoveHandler 的参数)使用 lambda 表达式。有关委托以及通过委托使用 lambda 表达式的更多信息,请参见 Delegate 语句和宽松委托转换。
Lambda 表达式语法
Lambda 表达式的语法类似于标准函数的语法。区别如下:
lambda 表达式没有名称。
Lambda 表达式不能有修饰符,例如 Overloads 或 Overrides。
Lambda 表达式不使用 As 子句来指定函数的返回类型。相反,类型是从 lambda 表达式主体计算得出的值推断而来的。例如,如果 lambda 表达式的主体为 Where cust.City = "London",则其返回类型为 Boolean。
函数体必须是表达式,不能是语句。函数体可以包含对函数过程的调用,但不能包含对子过程的调用。
不存在 Return 语句。函数返回的值是函数体中的表达式的值。
不存在 End Function 语句。
要么所有参数都必须具有指定的数据类型,要么必须推断所有类型。
不允许使用 Optional 和 Paramarray 参数。
不允许使用泛型参数。
由于存在上述限制,并且由于 lambda 表达式的使用方式,lambda 表达式通常简短而不复杂。
示例
下面的示例演示创建简单 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 表达式是 语言集成查询 (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)。有关标准查询运算符的更多信息,请参见标准查询运算符概述。