Я часто вызываю функции из лямбд, поскольку предоставленный делегат не совпадает или не имеет достаточных параметров. Раздражает, что я не могу делать лямбду на подпрограммах. Каждый раз, когда я хочу сделать это, я должен обернуть свою подпрограмму в функцию, которая ничего не возвращает. Не красиво, но это работает.
Есть ли другой способ сделать это, чтобы сделать это более гладким / красивее?
Я читал, что вся эта лямбда-неадекватность, вероятно, будет исправлена в VS2010 / VB10, поэтому мой вопрос скорее из любопытства.
Простой пример:
Public Class ProcessingClass
Public Delegate Sub ProcessData(ByVal index As Integer)
Public Function ProcessList(ByVal processData As ProcessData)
' for each in some list processData(index) or whatever'
End Function
End Class
Public Class Main
Private Sub ProcessingSub(ByVal index As Integer, _
ByRef result As Integer)
' (...) My custom processing '
End Sub
Private Function ProcessingFunction(ByVal index As Integer, _
ByRef result As Integer) As Object
ProcessingSub(index, result)
Return Nothing
End Function
Public Sub Main()
Dim processingClass As New ProcessingClass
Dim result As Integer
' The following throws a compiler error as '
' ProcessingSub does not produce a value'
processingClass.ProcessList( _
Function(index As Integer) ProcessingSub(index, result))
' The following is the workaround that'
' I find myself using too frequently.'
processingClass.ProcessList( _
Function(index As Integer) ProcessingFunction(index, result))
End Sub
End Class