C# 中ArrayList强制转化为数组【转】

把一个对象数组转换成ArrayList可以使用ArrayList.Adapter方法。这个方法把一个IList包裹在一个ArrayLIst里。现在上面的代码就可以写成:

 

Person[] personArray  =  myPerson.GetPersons();
ArrayList personList 
=  ArrayList.Adapter(personArray);

 

把一个ArrayList转换成对象数组可以使用ArrayList.ToArray方法。现在上面的代码就可以写成:

 

Person[] personArrayFromList  =  (Person[])personList.ToArray( typeof (Person));

 

 

不要忘了在调用ArrayList.ToArray方法之前进行强制类型转换,否则在编译的时候会出错提示你不能把一个ArrayList转换成Person对象数组。

总结
综上所述,下次你要转换一个对象数组为ArrayList的时候,就可以使用静态方法ArrayList.Adapter;或者可以使用ArrayList对象的ArrayList.ToArray方法来实现相反的转换。


首先,ArrayList的ToArray方法是常用的,且没有任何问题;
但是使用ArrayList.Adapter方法时,需要注意的是,该方法是直接把Array包裹在其里面,而没有进行任何复制,也就是说,这时Array和ArrayList指向的是同一个物体。

那么,这会造成什么后果呢?

首先,改变Array或ArrayList任意一方的值,另一方也将随之改变:

ExpandedBlockStart.gif
int [] MyIntArray  =   new   int [ 3 ]; 
MyIntArray[
0 =   1
MyIntArray[
1 =   2
MyIntArray[
2 =   3

ArrayList arrList 
=  ArrayList.Adapter(MyIntArray); 
arrList[
0 =   10

Console.WriteLine(MyIntArray[
0 ]); 

 

结果跟你想象的一样,是10,而不是1。

其次,由于Array是固定长度的,包裹了Array的ArrayList将无法执行Add,Remove等操作,这样在很多情况下就失去了我们使用ArrayList的意义。

因此,如果你真的想把一个数组赋给ArrayList,最好还是利用拷贝的方法。

转载于:https://www.cnblogs.com/luqingfei/archive/2010/09/16/1827867.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值