ArrayList arr1= (ArrayList)Session["Order_arr"];//如果arr的Count等于2
arr1.RemoveAt(0);ArrayList arr2= (ArrayList)Session["Order_arr"];
arr2.Count 的值应该是什么呢?我试过得到值是1,为什么?

解决方案 »

  1.   

    arr1 和 arr2 指向的是同一个ArrayList实例。
      

  2.   

    arr1 和 arr2 指向的是同一个ArrayList实例吗?
    照理说arr1 和 arr2应该是两个不同的对象呀。
    arr1.RemoveAt(0),难道会影响Session["Order_arr"]的值吗?
      

  3.   

    照理说((ArrayList)Session["Order_arr"]).RemoveAt(0);这样的写的话,会影响Session["Order_arr"]的值才应该发生变化的。ArrayList arr1= (ArrayList)Session["Order_arr
    arr1.RemoveAt(0);
    Session["Order_arr"]的值不应该变的呀?
      

  4.   

    你可以查询一下“值类型”和“引用类型”的区别。arr1 和 arr2 既可能是两个对象,也可能是同一个对象。
      

  5.   

    你自己做个实验:
    ArrayList a1 = new ArrayList();
    a1.Add("test");ArrayList a2 = a1;ArrayList a3 = a1;a3.RemoveAt(0);a1, a2, a3 实际上都是指向一个内存位置。操作的是同一个实例。
    这个时候 a1.Count == a2.Count == a3.Count == 0
      

  6.   

    顺便说一句,这和Session没关系。
      

  7.   

    同楼上你这里arr1和arr2是指向同一个对象的
      

  8.   

    既然和Session没关系,也就是说无论ArrayList作何操作,Session["Order_arr"]的值都不会发生变化,就算arr1和arr2是指向同一个对象,那么ArrayList arr2= (ArrayList)Session["Order_arr"];这句话其实是重新赋值给arr2,arr1和arr2中保存的应该还是Session["Order_arr"]的值,原先Count=2,重新赋值后还应该是2,那为什么现在Count=1呢?
      

  9.   

    Session里保存的是一个ArrayList对象,也就是一个引用对象。ArrayList arr2= (ArrayList)Session["Order_arr"];这不是new语句(跟你理解的“赋值”不一样)。而是把一个已经new了的实例传递给arr2
    这个“赋值”只是引用的传递。也就是说:
    arr1, arr2, Session["Order_arr"] 他们三个指向的同一个内存位置。无论是通过哪个引用修改了这个实例,他们三个引用所引用的实例实际已经被更改了。也就是无论是谁RemoveAt(0), 他们的.Count都发生了变化。我说的和Session没有关系的意思是:你说描述的问题,并不是由Session转换引起的。而是基础问题。
      

  10.   

    而是把一个已经new了的实例传递给arr2修改一下:而是把一个已经new了的实例的引用传递给arr2
      

  11.   

    那我怎么作才能从session中取值,使arr1, arr2的值不同呢?
      

  12.   

    那我怎么作才能从session中取值,放到两个不同ArrayList中呢?
      

  13.   

    http://blog.csdn.net/fangxinggood/archive/2005/04/30/369410.aspx
      

  14.   

    如果 ArrayList 中存放的是简单对象的话,可以用Clone()方法。ArrayList arr1= ((ArrayList)Session["Order_arr"]).Clone();
    arr1.RemoveAt(0); // Count = 1ArrayList arr2= (ArrayList)Session["Order_arr"]; // Count = 2
      

  15.   

    多谢fangxinggood(JustACoder)!!!可惜我只有20分,不然多给点。
      

  16.   

    ArrayList 中存放的是HashTable ,不知可否,我试试,多谢了!!!
      

  17.   

    如果你需要的是2个不同的session的话,你可以克隆出一个session[Serializable] 
      public object CloneObject(object obj)
            {            // 创建内存流
                using (System.IO.MemoryStream ms = new MemoryStream(1000))
                {
                    object CloneObject;                // 创建序列化器(有的书称为串行器)                // 创建一个新的序列化器对象总是比较慢。
                    BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
                    // 将对象序列化至流                bf.Serialize(ms, obj);                // 将流指针指向第一个字符                ms.Seek(0, SeekOrigin.Begin);
                    // 反序列化至另一个对象(即创建了一个原对象的深表副本)                CloneObject = bf.Deserialize(ms);                // 关闭流 
                    ms.Close();
                    return CloneObject;
                }
            }
      

  18.   

    女上司对我特别照顾,可我是个结过婚的人,我该怎么办?http://community.csdn.net/Expert/topic/5515/5515498.xml?temp=.4312403