将 Sub 包装为函数以在 Lambda 中使用

发布于 2024-08-26 16:26:42 字数 513 浏览 6 评论 0原文

我对 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浴红衣 2024-09-02 16:26:42

VB10 允许使用 Lambada Subs。

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

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

VB10 allows for the usage of Lambada Subs.

Have you tried a simple wrapper, such as:

Public Function Wrapper(source as Action) as Boolean  
    source.Invoke()   
    Return True 
End Function
你列表最软的妹 2024-09-02 16:26:42

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文