ArrayList arr1= (ArrayList)Session["Order_arr"];//如果arr的Count等于2
arr1.RemoveAt(0);ArrayList arr2= (ArrayList)Session["Order_arr"];
arr2.Count 的值应该是什么呢?我试过得到值是1,为什么?
arr1.RemoveAt(0);ArrayList arr2= (ArrayList)Session["Order_arr"];
arr2.Count 的值应该是什么呢?我试过得到值是1,为什么?
照理说arr1 和 arr2应该是两个不同的对象呀。
arr1.RemoveAt(0),难道会影响Session["Order_arr"]的值吗?
arr1.RemoveAt(0);
Session["Order_arr"]的值不应该变的呀?
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
这个“赋值”只是引用的传递。也就是说:
arr1, arr2, Session["Order_arr"] 他们三个指向的同一个内存位置。无论是通过哪个引用修改了这个实例,他们三个引用所引用的实例实际已经被更改了。也就是无论是谁RemoveAt(0), 他们的.Count都发生了变化。我说的和Session没有关系的意思是:你说描述的问题,并不是由Session转换引起的。而是基础问题。
arr1.RemoveAt(0); // Count = 1ArrayList arr2= (ArrayList)Session["Order_arr"]; // Count = 2
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;
}
}