Я часто вызываю функции из lambdas, поскольку предоставленный делегат не соответствует или не имеет достаточных параметров. Это раздражает, что я не могу делать лямбда на подпрограммах. Каждый раз, когда я хочу это сделать, я должен обернуть свою подпрограмму в функцию, которая ничего не возвращает. Не очень, но это работает.Вызов подпрограмм из лямбда в vb.net
Есть ли другой способ сделать это, что делает эту гладкость/красивее?
Я читал, что вся эта неадекватность лямбда, вероятно, будет исправлена в 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
Видя ваше решение, я понимаю, что на самом деле я поддерживаю состояние, которое, конечно, должно делать с классом. И с вашим решением аргументы делегату уже не важны, что делает его еще красивее. – Tewr