0

我正在研究 C#.net。我有一个 vb.net 代码,我想将这些代码转换为 C#。我已经完成了所有任务,但是在运行应用程序时,它给了我一个对象未​​设置为对象引用的错误。下面是我的 VB.net 代码。我在我的代码中使用了第三方 ddl,所以 ExchangeList 是那个 dll 的一个类。

 Private WithEvents moExchanges As ExchangeList
Private Sub RequestChartData()

        Trace.WriteLine("Init")           
        moExchanges = moHost.MarketData.Exchanges
 End Sub

现在下面是我的 C#.code

  Private Host moHost;
  Private ExchangeList moExchanges;
 private void RequestChartData()
    {

        Trace.WriteLine("Init");           
        moExchanges = moHost.MarketData.Exchanges;
    }

谢谢。

4

2 回答 2

0

在没有看到更多代码的情况下,不可能 100% 确定地告诉您源object not set to an object reference.代码,但错误似乎是在告诉您它moHost为空 - 换句话说,您尚未创建对象的实例。

因此,当您尝试调用MarketData.Exchanges该对象时(因此您可以将其分配给moExchanges,它会引发错误。

在您的代码中查找moHost并确保您已经为它分配了该对象的一个​​实例(通过调用它的构造函数,就像构造函数一样moHost = new Host()或任何构造函数),这应该可以解决您的错误。

更新

你永远不会初始化moHost. 这一行:

private Host moHost;

简单地声明对象——此时它为空。因此,当您尝试访问任何实例方法/属性时,您会得到对象未设置为对象引用错误。

您需要moHost通过调用它的构造函数来创建一个实例,如下所示:

private Host moHost = new Host();

构造函数可能需要参数 - 查看第三方 DLL 的文档(IDE 中的智能感知也可能会告诉您需要哪些参数,如果有的话)。

这将解决您的错误。

于 2013-04-25T05:52:36.633 回答
0

()代替:

Private Host moHost;
Private ExchangeList moExchanges;

我认为你需要把它写成:

Private Host moHost = New Host();
Private ExchangeList moExchanges = New ExhangeList();
于 2013-04-25T10:31:44.843 回答