【问题标题】:Very Specific C# to VB.NET Conversion Problem非常具体的 C# 到 VB.NET 的转换问题
【发布时间】:2010-11-07 23:47:27
【问题描述】:

我目前正在开发一个使用 AutoFac Inversion of Control 容器的项目。

我正在尝试将一些示例代码从 C# 转换为我现有项目的代码库,该项目是用 VB.NET 编写的,但我遇到了问题。

原来的代码行是:

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

我已转换为:

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

但是 - 这会导致错误,“Argument not specified for parameter 'ev' of CheckHandshake”。

EventHub.Subscribe(Of HandshakingEvent)过程的参数类型是System.Action(of HandshakingEvent)

我可以看到问题所在,但我真的不知道该怎么办!我尝试过使用“AddressOf”,但这似乎也不起作用。

提前谢谢... - 克里斯

【问题讨论】:

  • CheckHandshake 是什么?

标签: c# vb.net c#-to-vb.net


【解决方案1】:

试试

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

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

【讨论】:

  • 谢谢 - 你是正确的。我试过'AddressOf',但它仍然没有用。但事实证明这是出于不同的原因!我已经将 CheckHandshake 的参数声明为 ByRef,而不是 ByVal!
【解决方案2】:

VB 代码试图调用该方法,而不是为其创建委托。使用AddresOf 运算符获取删除门:

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

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

【讨论】:

  • 谢谢 - 你是正确的。我试过'AddressOf',但它仍然没有用。但事实证明这是出于不同的原因!我已经将 CheckHandshake 的参数声明为 ByRef,而不是 ByVal!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多