函数表达式

更新: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)。有关标准查询运算符的更多信息,请参见标准查询运算符概述

请参见

概念

lambda 表达式

Visual Basic 中的运算符和表达式

语句概述

值的比较

Boolean 表达式

宽松委托转换

参考

Function 语句 (Visual Basic)

If 运算符