非常具体的C#到VB.NET转换问题

3

我目前正在处理一个使用AutoFac控制反转容器的项目。

我试图将一些C#示例代码转换为我的现有VB.NET项目的代码库,但遇到了问题。

原始代码行如下:

EventHub.Subscribe<HandshakingEvent>(container.Resolve<HandshakeAuthenticator>().CheckHandshake);

我已经将其转换为:

EventHub.Subscribe(Of HandshakingEvent)(Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)

但是,这会导致错误,“CheckHandshake的参数‘ev’未指定”。
EventHub.Subscribe(Of HandshakingEvent)过程的参数类型为System.Action (of HandshakingEvent)
我知道问题出在哪里,但我不确定该怎么做!我尝试使用“AddressOf”,但似乎也行不通。
提前感谢... - Chris

CheckHandshake是什么? - SLaks
2个回答

5

尝试

EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)

(使用 AddressOf 关键字来获取委托)


谢谢 - 你说得对。我尝试过 'AddressOf',但它仍然不起作用。结果是因为另一个原因!我声明了 CheckHandshake 的参数为 ByRef,而不是 ByVal! - Chris Roberts

3

VB代码试图调用方法而不是创建委托。使用AddresOf运算符获取委托:

EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)

在C#中不需要关键字,因为在调用方法时总是使用括号,但在VB中你也可以不使用括号调用一个方法。

谢谢 - 你说得对。我尝试过 'AddressOf',但它仍然不起作用。结果是因为另一个原因!我声明了 CheckHandshake 的参数为 ByRef,而不是 ByVal! - Chris Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接