为什么添加 Lambda 表达式?
为了支持 LINQ 查询,需要添加一些功能,其中包括 Visual Basic 和 lambda 表达式。假设您在 Visual Basic 中使用以下查询语句:
- Dim q = From p In Process.GetProcesses() _
- Where p.PriorityClass = ProcessPriorityClass.High _
- Select p
请注意,在 Where 子句中有一个 Visual Basic 表达式:p.PriorityClass = ProcessPriorityClass.High.为了执行此筛选,编译器为 Where 筛选创建一个 lambda 表达式,且将其应用于进程列表中的每个元素:
- Dim q = Process.GetProcesses().Where( _
- Function(p) p.PriorityClass = ProcessPriorityClass.High)
充分利用 Lambda 表达式
在 Visual Basic 2008 中,您只能提供一个表达式作为 lambda 的主体,但是最新引入的三元关键字允许您使用简单、具备完全类型化的条件表达式:
- Dim x = If(condition, 10, 20)
在 lambda 表达式中可以使用 If 关键字:
- Dim x = Function(c As Customer) _
- If(c.Age >= 18, c.Address, c.Parent.Address)
这时类型推断介入,且编译器确定 lambda 表达式的返回类型为 Address。然后,它为 x 创建委托类型(如之前讨论),该委托类型接受 Customer 作为输入并返回 Address。