如何使用使用委托返回值的Function继续执行lambda表达式的每个成员?

时间:2016-11-05 05:55:58

标签: vb.net linq lambda

我在工作中使用Vb.net。在尝试委托一个将值返回到lambda表达式的每个成员中的Function时,我发现了一个难点。

如果将lambda的每个成员委托给Sub:

,我可以这样做
Public class TransactionX
    Public Number1 as Integer 
    Public Number2 as Integer
end class

Public Class TestX

Public Sub DoTest()
    Dim trans as New List(Of TransactionX)
    trans.Add(New TransactionX with{.Number1=0, .Number2=0})
    trans.Add(New TransacrtionX with{.Number1=1, .Number2=1})

    dim changeNumber = New Action(Of TransactionX)(AddressOf DoChange)
    dim transSearch = trans.Where(Function(t) t.Number1>0).ForEach(changeNumber)
 end Sub

 Private Sub DoChange(ByVal tranX as TransactionX)
    with tranx
      .Number1 = 10
      .Number2 = 10
    end with
 end Sub
end Class

上面的代码将更新lambda表达式的每个成员的结果。 如果我想为Lambda中使用私有函数捕获的每个成员执行Number1 * Number2然后将返回集合,该怎么办? 我认为可以使用C#完成,但我无法使用Vb.net解决它。

1 个答案:

答案 0 :(得分:0)

更改方法以返回计算值,并将其与Select扩展方法

一起使用
 Private Function DoChange(ByVal tranX As TransactionX) As Integer
     Return tranX.Number1 * tranX.Number2
 End Function

 Dim transSearch As IEnumerable(Of Integer) = trans.Select(AddressOf DoChange)

使用AddressOf关键字将现有方法作为参数

传递