当我尝试将元素添加到List <string> </string>类型的数组时,对象引用未设置为对象异常的实例

时间:2013-06-24 08:17:00

标签: asp.net

在我的项目中,我有一个变量numtorust,它代表了tourits的数量。 (用于测试目的numtourist = 2)

for (i=0,numtoursut; i++)

我动态创建了5个复选框,为每个游客分配了checkedChanged事件。另外,为了跟踪哪个旅游者适用的复选框,我添加属性'集合'

mycheckbox.InputAttributes.Add("collection", i.ToString());

在checkedchanged事件处理程序中 - 当用户选中一个复选框时,我检查了它的集合属性是否为0或1(第一个或第二个用户)。然后我将myche1的复选框值添加到List<string),如果集合属性= 1。

但是当我决定制作名为List<string>的{​​{1}}类型的数组时 当我尝试向其添加元素时,我得到了一个异常 - 对象引用未在我的代码的这一行中将设置为对象的实例

Toursit

这是我的完整代码

Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());     

编辑1:

新的

代码

protected void checkChanged(object sender,EventArgs e) {

 protected void checkChanged(object sender, EventArgs e)
 {
     CheckBox chk = (CheckBox)sender;
     /*that doesn't work

     if (chk.Checked)
     {
         Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());

         ((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];
     }*/

     //this works with myche1 of type list<string>
     if ((chk.Checked)&&(chk.InputAttributes["collection"].Equals("1")))
     {
         myche1.Add(chk.InputAttributes["value"].ToString());
         lblProba.Text += chk.InputAttributes["value"].ToString();
         Session["chk1"] = myche1;
     }
 }
当我测试Sessio [“chk”] == 0时,再次出现同样的错误。

但如果我取消注释(所以我不再有这个错误)

List<string>[] Toursist = new List<string>[2];
//Session["chk"] = new List<string>[2]; 
for (int i = 0; i < Toursist.Length; i++)
{
    Toursist[i] = new List<string>();
   // ((List<String>[])Session["chk"])[i] = Toursist[i];
}

    CheckBox chk = (CheckBox)sender;
    if (chk.Checked)
    {

      if (((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] == null)
        {
            ((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];


        }
            Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());
            lblProba.Text += chk.InputAttributes["collection"].ToString();
            ((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];


    }

在每个回发事件中,我的会话将为空,我不想要!!

1 个答案:

答案 0 :(得分:1)

您尚未创建任何列表。当您创建列表数组时,它不会自动创建数组中的所有列表,您必须手动执行此操作:

List<string>[] Toursist = new List<string>[numtoursut];
for (int i = 0; i < Toursist.Length; i++) {
  Toursist[i] = new List<string>();
}