函数表达式 (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 表达式不能包含修饰符,如 OverloadsOverrides

  • 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)

有关查询方法的详细信息,请参阅查询。 有关标准查询运算符的详细信息,请参阅标准查询运算符概述

请参阅