方法返回c#,I Can';不要消耗它的返回值

方法返回c#,I Can';不要消耗它的返回值,c#,methods,dynamic-arrays,C#,Methods,Dynamic Arrays,我试图使用C#中的一个DLL定位方法,该方法返回结构的动态数组。无论我做什么,我都会收到众所周知的“对象引用未设置为对象实例”错误,这是我的最后一段代码,它仍然告诉我该错误: string v_user = "kish"; string v_pass = "u"; string v_number = "p"; string v_address = "url has been replaced with this string";

我试图使用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>");

        }
string v_user=“kish”;
字符串v_pass=“u”;
字符串v_number=“p”;
string v_address=“url已替换为此字符串”;
字符串v_cid=“abc”;
Cls_SMS.SMSReceive.STC_SMSReceive[]xts;
Cls_SMS.SMSReceive px=新的Cls_SMS.SMSReceive();
//***是下一行
xts=px.ExtendReceiveSMS(v_用户、v_通行证、v_编号、v_地址、v_cid);
int upper_bound=xts.GetUpperBound(0);
对于(int计数器=0;计数器<上限;计数器++)
{
Response.Write(xts[counter].Message.ToString());
响应。写入(“
”); }
请注意,我的主要问题是接收结构类型名称为(Cls_SMS.SMSReceive.STC_SMSReceive)的动态结构数组,而连接到远程服务器等其他方面不是我的问题。我只想将供应商定义的结构的动态数组分配到*行中赋值运算符的左侧

请帮帮我。
非常感谢。

不清楚px.extendedreceivesms(v_用户、v_通行证、v_号码、v_地址、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;
}
如果它是动态的,您还可以查看:

public IList ExtendReceiveSMS()
{
IList结果=新列表();
添加(新STC_SMSReceive());
添加(新STC_SMSReceive());
返回结果;
}

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

这里有各种可能性:

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

如果这三条路由都失败了,我个人会打开它,寻找一个可能返回
null
的场景。然后告诉供应商修复错误或澄清文档(视情况而定)。

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

var xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);
Visual Studio现在报告的xts将是什么类型

您可以通过将光标悬停在
xts
上并从工具提示中读取来判断


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

您能否在此上下文中定义“动态数组”?它到底返回了什么?如果你的意思是可增长的,C#vector(
Foo[]
)不是“动态数组”。你从ExtendReceiveSMS中得到了什么?@Jaime:我得到了空值。正如评论讨论中所指出的;我返回null而不是导致某种类型的强制转换异常,这意味着错误完全在第三方代码中;这里只有他们能给出合理的答案。ExtendReceiveSMS是我试图使用的方法名。此方法从远程服务器接收SMS消息,对于它获取的每条SMS消息,它都返回结构数组的一个结构成员。我需要定义STC_SMSReceive类型(实际上是一个结构类型)的动态数组,并将其分配给px.extendedReceivesms方法的结果。还要注意,我无权访问该方法或结构的定义。我正在使用它。@Farshid,好的,当您在调试模式下单步执行代码时,
xts
变量在调用此方法后包含什么?
xts
null吗?那么,我想你必须阅读你正在使用的库的文档,看看在什么情况下这个方法可能返回null以及如何正确使用它,或者联系这个方法的作者,直接问他。这完全脱离了主题,与您最初的问题没有任何关系。如果STC_SMSReceive[]类型的xts能够获取该方法的结果,我的所有问题都会得到解决。不管我做什么,它都是空的。
var xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);