将Sub包装为Lambda中使用的函数

时间:2010-03-25 09:11:29

标签: vb.net lambda moq

我遇到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)

我试过这个,但我明白了:

  

Lambda参数不在范围内

2 个答案:

答案 0 :(得分:1)

VB10允许使用Lambada Subs。

您是否尝试过一个简单的包装器,例如:

Public Function Wrapper(source as Action) as Boolean  
    source.Invoke()   
    Return True 
End Function

答案 1 :(得分:-1)

2010年,如果它的Sub而不是Function只是用Sub替换Function。

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