将 Sub 包装为函数以在 Lambda 中使用
我对 VB9 和起订量有疑问。
我需要对 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 参数不在范围内
I have a problem with VB9 and Moq.
I need to call a verify on a Sub. Like so:
logger.Verify(Function(x) x.Log, Times.AtLeastOnce)
And my logger looks like this:
Public Interface ILogger
Sub Log()
End Interface
But with VB this is not possible, because the Log method is a Sub, and thereby does not produce a value.
I don't want to change the method to be a function.
Whats the cleanest way of working around this limitation and is there any way to wrap the Sub as a Function like the below?
logger.Verify(Function(x) ToFunc(AddressOf x.Log), Times.AtLeastOnce)
I have tried this, but i get:
Lambda Parameter not in scope
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
VB10 允许使用 Lambada Subs。
您是否尝试过简单的包装器,例如:
VB10 allows for the usage of Lambada Subs.
Have you tried a simple wrapper, such as:
2010 年,如果它是 Sub 而不是 Function,只需将 Function 替换为 Sub。
logger.Verify(Sub(x) x.Log, Times.AtLeastOnce)
In 2010 if its a Sub and not a Function just replace Function with Sub.
logger.Verify(Sub(x) x.Log, Times.AtLeastOnce)