Обернуть Sub как функцию для использования в Lambda

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

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

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

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

Public Interface ILogger
    Sub Log()
End Interface

Но с VB это невозможно, потому что метод Log является подпрограммой и, таким образом, не создает значения.

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

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

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

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

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


person Luhmann    schedule 25.03.2010    source источник


Ответы (2)


VB10 позволяет использовать сабвуферы Lambada.

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

Public Function Wrapper(source as Action) as Boolean  
    source.Invoke()   
    Return True 
End Function
person M.A. Hanin    schedule 25.03.2010

В 2010 году, если это подпрограмма, а не функция, просто замените функцию на подпрограмму.

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

person Ian Hern    schedule 17.03.2011
comment
я знаю, что технически это не отвечает на вопрос, но я использовал 2010 год и наткнулся на это, поэтому после того, как я нашел ответ, я вернулся, чтобы опубликовать его. - person Ian Hern; 17.03.2011