在Intellisense中没有看到数组的长度

时间:2012-06-08 06:39:23

标签: c# c#-4.0

现在我将消息数组作为查询字符串发送到另一个页面。但是当我抓住下一页时,我们知道了arr.Length(通常它显示了intellisense),但在这种情况下它没有显示。

这里是msg_arr传递给另一个页面

 private void check(string keyword , params Array[] msg_arr)
    {
        switch (keyword.ToUpper())
        {
            case  "SETTELG":
                Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr" + msg_arr);

                break;

下面的代码是下一页我想要捕捉到的价值&数组(msg_arr)。但长度不起作用

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string Moose = Request.QueryString[1];
        }

        if (msg_arr != null)
        {
            if ((msg_arr.Length == 3) && (msg_arr[1].ToLower() == "slett"))

            {

            }


        }
    }

这里是第二个代码截图,你可以看到长度未显示 here is the second code screenshot,you can see Length not shown

2 个答案:

答案 0 :(得分:3)

这里有点不对劲。

private void check(string keyword , params Array[] msg_arr)

这个函数真的是否传递了Array s的数组?我认为string[]object[]可能是可能的类型。

Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr" + msg_arr);

那将在ToString()上调用msg_arr,这是一个数组,会产生如下结果:

"../SMSFunction/SeenSMS.ascx?value=1&arrSystem.Array[]"

Array不会覆盖ToString(),因此您从Object获取一个输出该类型的完全限定名称的名称 - 我认为这不是您想要的名称。< / p>

最后,我们会找到您的第二段代码,但您甚至没有向我们展示任何尝试设置新msg_arr变量的代码。但是它无法获得msg_arr的原始值,因为你还没有通过它。


您需要决定如何将数组打包到查询字符串中。例如,如果msg_arr应该是一组可读字符串(params string[] msg_arr定义中的check),那么您可能会尝试以下内容:

Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr=" + string.Join("|",msg_arr));

其中|是不应出现在传递的字符串中的字符。 (String.Join

然后,您可以使用以下内容将其重新构建为数组:

protected void Page_Load(object sender, EventArgs e)
{
    string[] msg_arr = Request.QueryString["arr"].Split('|');
    /* rest of method */

String.Split

当然,如果字符串的长度(或它们的数量)太大,可能会有一个问题,根本不可能通过查询字符串传递它们。

答案 1 :(得分:1)

您无法在查询字符串中传递整个集合。你唯一能做的就是传递一个集合元素。即数组不能传递但是array [0] .toString()可以传递。请通过会话变量以简单的方式完成。将数组存储在Page1.aspx中的Session变量中,并在Page2.aspx上检索。示例代码如下

Page1.aspx

   protected void Page_Load(object sender, EventArgs e) 
    { 
      int[] array = { 1, 2, 3, 4, 5 }; 
      Session["Array"] = array; Response.Redirect("About.aspx"); 
    }

Page2.aspx

 protected void Page_Load(object sender, EventArgs e) 
    { 
      int[] array; 
      if (Session["Array"] != null) 
      { 
         array = (int[])Session["Array"]; 
         if (array.Length == 3) 
         { 
            /////implementaion 
         } 
      } 
    }