0

我试图在 C# 中使用一个位于 DLL 的方法,它返回一个动态的结构数组。无论我做什么,我都会收到众所周知的“对象引用未设置为对象的实例”错误,这是我的最后一个代码,它仍然告诉该错误:

string v_user = "kish";

        string v_pass = "u";

        string v_number = "p";

        string v_address = "url has been replaced with this string";

        string v_cid = "abc";

        Cls_SMS.SMSReceive.STC_SMSReceive[] xts;

        Cls_SMS.SMSReceive px = new Cls_SMS.SMSReceive();

   // *** is the below line

        xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);

        int upper_bound = xts.GetUpperBound(0);

        for (int counter = 0; counter < upper_bound; counter++)

        {

            Response.Write(xts[counter].Message.ToString());

            Response.Write("<br>");

        }

请注意,我的主要问题是关于接收结构类型名称 (Cls_SMS.SMSReceive.STC_SMSReceive) 的动态结构数组,而连接到远程服务器等其他方面不是我的问题。我只想将供应商定义的结构的动态数组分配到*行中的赋值运算符的左侧。

请帮我。非常感谢。

4

3 回答 3

0

如果您将单独的声明替换为xts

var xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);

Visual Studio 现在报告xts的类型是什么?

您可以通过将光标悬停在xts工具提示上并阅读它来判断。

除此之外,如果供应商报告它适用于其他用户,则您必须有一个(或多个)参数错误。向供应商索取一些有效的示例代码,以便您检查它是否正确连接到服务器。如果是,则错误在其他参数中,如果不是,则说明您与服务器的连接有问题。

于 2010-12-11T13:17:16.837 回答
0

目前尚不清楚该px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);方法如何分配数组,由于异常,它可能根本没有分配它。以下是分配动态数组并返回它的方法:

public STC_SMSReceive[] ExtendReceiveSMS()
{
    STC_SMSReceive[] result = new STC_SMSReceive[2];
    result[0] = new STC_SMSReceive();
    result[1] = new STC_SMSReceive();
    return result;
}

此外,如果它是动态的,您还可以查看List<T>

public IList<STC_SMSReceive> ExtendReceiveSMS()
{
    IList<STC_SMSReceive> result = new List<STC_SMSReceive>();
    list.Add(new STC_SMSReceive());
    list.Add(new STC_SMSReceive());
    return result;
}
于 2010-12-11T12:22:27.167 回答
0

这与严格数组无关;简单地说,您正在使用的库方法正在返回null.

这里有多种可能性:

  • 在某些情况下,返回可能null是预期的返回值;检查文档
  • 也许你需要一些额外的配置,或者你可能需要调用一些额外的方法(GetTheData()太有希望了;p),或者在这些数据可用之前等待一些其他事件 - 检查文档
  • 也许这只是一个库错误;联系供应商

如果所有 3 条路线都失败了,我个人只会打开它反射器并寻找可能返回的场景null。然后告诉供应商修复错误或酌情澄清文档。

于 2010-12-11T13:01:41.067 回答