关于ArrayList 我定义了两个ArrayList,AL1、AL2,然后AL2=AL1,然后进行了AL2.RemoveAt()操作,可是把AL2清空了以后,AL1也被清空了,有什么办法,让我只清空AL2,而不清空AL1吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //AL2=AL1AL2= (ArrayList)AL1.Clone(); void Main(){ ArrayList ay1=new ArrayList(); for(int i=0;i<10;i++) { ay1.Add(i); } ArrayList ay2=new ArrayList(); foreach(int i in ay1) { ay2.Add(i); } ay2.RemoveAt(3); Console.WriteLine(ay1); Console.WriteLine(ay2);}原因:ArrayList是引用类型 然后AL2=AL1,然后进行了AL2.RemoveAt()操作 AL2=AL1因为是引用传递的。 AL2指向的还是AL1的内存地址。改了AL2当然也改了AL1, 必需 AL2=NEW ArrayList(); AL2.ADD()新的值。 用ArrayList的Clone 方法如果你ArrayList不是值类型,则不要使用克隆方法,自己写克隆 本帖最后由 net_lover 于 2011-06-23 14:08:35 编辑 ArrayList是引用类型,l2 = l1.Clone() as ArrayList; 要clone才行。直接赋过去,只是一个reference而已。所以你删除原本的,reference那个也跟着没有了。 ArrayList已经被弃用了,除非你在维护老程序。否则请用List<object>代替。 顶!!! 用的较少了,主要性能考虑的。ArrayList 设计到装箱拆箱,很多问题, 如果你非要用 这个两个都可以 ArrayList d3 = new ArrayList(); d3.Add("测试数据"); ArrayList c3= (ArrayList) d3.Clone(); ArrayList fq = new ArrayList(d3);还有去遍历一个一个添加,也行。不怎么建议 webbrowser Navigate 问题 关于C#如何更新本地化DLL的问题 程序控制打开一个浏览器后,怎么程序控制参数 请教:强类型问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 未在本地计算机上注册“Micrsoft.Jet.OLEDB.4.0”提供程序 朋友们请问一下 ASP.NET的问题 ! httpwebresponse总是超时 谁有讽刺比尔盖茨的漫画或者图片?? 急寻.NET程序开发人员(有一定经验,北京,) 十万火急,水晶报表打印,高分求救 (在线等-答即给分) 弱弱地问一下,像 qq电脑管家 这样的软件,是用什么程序语言开发的? 怎么编译类库
AL2= (ArrayList)AL1.Clone();
{
ArrayList ay1=new ArrayList();
for(int i=0;i<10;i++)
{
ay1.Add(i);
}
ArrayList ay2=new ArrayList();
foreach(int i in ay1)
{
ay2.Add(i);
}
ay2.RemoveAt(3);
Console.WriteLine(ay1);
Console.WriteLine(ay2);
}原因:ArrayList是引用类型
l2 = l1.Clone() as ArrayList;
顶!!! 用的较少了,主要性能考虑的。ArrayList 设计到装箱拆箱,很多问题, 如果你非要用 这个两个都可以
ArrayList d3 = new ArrayList();
d3.Add("测试数据");
ArrayList c3= (ArrayList) d3.Clone();
ArrayList fq = new ArrayList(d3);
还有去遍历一个一个添加,也行。不怎么建议