函数表达式 (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 表达式不能包含修饰符,如
Overloads
或Overrides
。Lambda 表达式不使用
As
子句来指定函数的返回类型。 而是使用单行 Lambda 表达式的主体所估算的值或使用多行 Lambda 表达式的返回值来推断出该类型。 例如,如果单行 Lambda 表达式的主体为Where cust.City = "London"
,则其返回类型为Boolean
。单行 Lambda 表达式的主体必须是一个表达式,而不是语句。 主体可以包含对 Function 过程的调用,但不能包含对子过程的调用。
所有参数都必须具有指定的数据类型,或者必须推断所有数据类型。
不允许使用可选参数和可变参数。
不允许使用泛型参数。
示例 1
以下示例显示了两种创建简单 Lambda 表达式的方法。 第一种使用 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 表达式是语言集成查询 (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)
有关查询方法的详细信息,请参阅查询。 有关标准查询运算符的详细信息,请参阅标准查询运算符概述。