#vb.net
#vb.net
Вопрос:
Я пытаюсь добиться эффекта, подобного каррированию, в VB. Я хочу иметь возможность это сделать:
Dim wrap = WrapNumber("-")
wrap(5) 'returns "-5-"
Вот моя функция:
Private Function WrapNumber(ByVal separator As String) As Func(Of Integer, String)
Return Function(ByRef number As Integer) As String
Return separator number separator
End Function
End Function
Я получаю сообщение об ошибке в Return
строке с этим сообщением:
Вложенная функция не имеет той же подписи, что и делегат
Func(Of Integer, String)
Я не уверен, почему я получаю эту ошибку. Функция WrapNumber
возвращает функцию, которая принимает Integer
и возвращает a String
, поэтому, насколько я вижу, она имеет тот же тип, Func
что и указанный в WrapNumber
подписи.
Комментарии:
1. Просто плевок, но я уверен
ByRef
, что это вызывает ваши проблемы.Func
не поддерживает аргументы ByRef .2. Удалите
ByRef
иamp;
не используйте
Ответ №1:
Если вы включите опцию Strict , она покажет вам многое из того, что происходит не так. В дополнение к тому, что ByRef не требуется, как указано в комментариях, конкатенация пытается обработать разделитель как double . Если вы внесете эти изменения, то все будет работать нормально:
Dim wrap = WrapNumber("-")
Dim test As String = wrap(5)
'test is equal to "-5-"
Private Function WrapNumber(ByVal separator As String) As Func(Of Integer, String)
Return Function(number As Integer) As String
Return separator amp; number.ToString amp; separator
End Function
End Function
Комментарии:
1. Вы также можете удалить внешнюю
ByVal
функцию (по крайней мере, для согласованности). То же самое дляToString
it строго не требуется