我在工作中使用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解决它。
答案 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
关键字将现有方法作为参数