声明定义函数 lambda 表达式的参数和代码。
语法
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
部件
术语 | 定义 |
---|---|
parameterlist |
可选。 表示此过程参数的本地变量名称的列表。 即使列表为空,括号也必须存在。 请参阅 参数列表。 |
expression |
必填。 单个表达式。 表达式的类型是函数的返回类型。 |
statements |
必填。 使用 Return 语句返回值的语句列表。 (请参阅 Return 语句。返回的值的类型是函数的返回类型。 |
注解
lambda 表达式是一个不带名称的函数,用于计算并返回值。 可以在任意位置使用 lambda 表达式,除了作为参数之外 RemoveHandler
,还可以在任意位置使用委托类型。 有关委托以及将 lambda 表达式与委托一起使用的详细信息,请参阅 Delegate 语句 和 放宽委托转换。
Lambda 表达式语法
lambda 表达式的语法类似于标准函数的语法。 区别如下:
lambda 表达式没有名称。
Lambda 表达式不能有修饰符,例如
Overloads
或Overrides
。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)
有关查询方法的详细信息,请参阅 查询。 有关标准查询运算符的详细信息,请参阅 标准查询运算符概述。