lambda 过程

如果仅在某个事件代码中,需要反复使用某个过程(Sub或Function),但不需要在其他事件中使用这个过程,那么可以使用lambda过程。

定义lambda过程过程的时候,不需要指定过程名,也不需要用As指定返回类型,直接将Function或Sub赋值给一个变量,通过变量调用这个lambda过程。

lambda过程可以直接在事件代码中定义,不需要在全局代码中定义,更便于维护和使用,

示例一

你可以直接复制下面的代码到命令窗口测试执行

'定义一个lambda ,赋值给变量getSortColumn
Dim
getSortColumn = Function(index As Integer)
   
Select Case index
       
Case 0
           
Return "FirstName"
       
Case 1
           
Return "LastName"
       
Case 2
           
Return "CompanyName"
       
Case Else
           
Return "LastName"
   
End Select
End
Function 'lambda过程定义完成

Dim sc1 As String = getSortColumn.Invoke(0) '通过变量的Invoke调用lambda过程
Dim
sc2 As String = getSortColumn.Invoke(3)
MessageBox.Show(sc1)

MessageBox.Show(sc2)

需要注意的是,定义lambda过程的语句后面不能有任何内容,注释也不行,所以下面的代码会出错:

Dim getSortColumn = Function(index As Integer) '定义一个lambda ,赋值给变量getSortColumn

示例二

如果不需要返回值,则在定义lambda过程的时候,用Sub代替Funtion,例如:

Dim ShowSum = Sub(v1 As Double, v2 As Double, v3 As Double)
   
Dim sum As Double
    sum = v1 + v2 + v3
    MessageBox.Show(
"合计:" & sum)
End
Sub

ShowSum.Invoke(1, 2, 3)

示例三

如果lambda过程只有一行代码,可以这样简写为一行

Dim ShowMsg = Function(msg) Messagebox.Show(msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)

ShowMsg.Invoke("今天星期五啦")

上面的代码等效于:

Dim ShowMsg = Function(msg)
    Messagebox.Show(msg,
"提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
End
Function
ShowMsg.Invoke(
"今天星期五啦")


本页地址:http://www.foxtable.com/webhelp/topics/6054.htm