0

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

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

我为每个游客动态创建了 5 个复选框,并分配了 checkChanged 事件。另外为了跟踪哪个复选框适用于哪个游客,我添加了属性“收藏”

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

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

但是当我决定使用名称 创建一个类型数组时, 当我尝试向其中添加一个元素时,我遇到了一个异常 - 对象引用未设置为我的代码的这一行中的对象实例List<string>Toursit

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

这是我的完整代码

 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;
     }
 }

编辑1:

新代码

protected void checkChanged(object sender, EventArgs e) {

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"])];


    }

这次当我测试 Sessio["chk"] == 0 时再次出现同样的错误。

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

// ((List<String>[])Session["chk"])[i] = Toursist[i];

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

4

1 回答 1

1

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

List<string>[] Toursist = new List<string>[numtoursut];
for (int i = 0; i < Toursist.Length; i++) {
  Toursist[i] = new List<string>();
}
于 2013-06-24T08:23:33.283 回答