由于你提供的信息有限,现在能说的是:
1.当用ArrayList.Add(object o)时,假如o对象已经存在,还是会添加到ArrayList的末尾。所以检查你的程序是否多次添加了同一对象?
2.当用ArrayList["name"]=...添加对象时,若对象已存在,酒会、、就会改写原对象。所以你也可以考虑用这种方式添加对象。

解决方案 »

  1.   

    问题估计是在程序的其他地方多次调用了userList.Add()所在的函数了。ArrayList使用的是index:ArrayList[index]。
    使用ArrayList[index]时必须保证该index已经放入对象,不然会引发下标越界的异常。
      

  2.   

    在添加之前判断这个对象是否存在ArrayList中,如果存在不添加,如果不存在就添加。
      

  3.   

    如果ArrayList添加的所有对象都实现了IComparable接口,那么可以用BinarySearch方法来检测对象是否存在:
    if (userList.BinarySearch(obj) < 0) {//不存在则添加
     userList.Add(obj);
    }
    否则用Contains:
    if (userList.Contains(obj)==false) {//不包含则添加
     userList.Add(obj);
    }
      

  4.   

    也许这样行
    ArrayList al =new ArrayList()....
    for(int i=0;i<n;i++)
    al.Add(..);......
    if(al.Count>0)
    al.Remove();
      

  5.   

    用contains,判断插入对象是否已经存在,不存在,再插入比较好。