函数表达式 (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)。 有关标准查询运算符的更多信息,请参见标准查询运算符概述

请参见

参考

Function 语句 (Visual Basic)

If 运算符 (Visual Basic)

概念

Lambda 表达式 (Visual Basic)

Visual Basic 中的运算符和表达式

值的比较 (Visual Basic)

布尔表达式 (Visual Basic)

宽松委托转换 (Visual Basic)

其他资源

语句 (Visual Basic)