Wrap Sub as Function для использования в Lambda - PullRequest
3 голосов
/ 25 марта 2010

У меня проблема с VB9 и Moq.

Мне нужно вызвать подтверждение на Sub. Вот так:

logger.Verify(Function(x) x.Log, Times.AtLeastOnce)

А мой логгер выглядит так:

Public Interface ILogger
    Sub Log()
End Interface

Но с VB это невозможно, потому что метод Log является Sub, и, следовательно, не дает значения.

Я не хочу менять метод на функцию.

Какой самый чистый способ обойти это ограничение и есть ли способ обернуть Sub как функцию, подобную приведенной ниже?

logger.Verify(Function(x) ToFunc(AddressOf x.Log), Times.AtLeastOnce)

Я пробовал это, но я получаю:

Лямбда-параметр вне области действия

Ответы [ 2 ]

1 голос
/ 25 марта 2010

VB10 позволяет использовать Lambada Subs.

Вы пробовали простую обертку, такую ​​как:

Public Function Wrapper(source as Action) as Boolean  
    source.Invoke()   
    Return True 
End Function
0 голосов
/ 17 марта 2011

В 2010 году, если это Sub, а не Function, просто замените Function на Sub.

logger.Verify ( Sub (x) x. Log, Times.AtLeastOnce)

...