zoukankan      html  css  js  c++  java
  • 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任意一方的值,另一方也将随之改变:

    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,最好还是利用拷贝的方法。

  • 相关阅读:
    Access, SQL Server, and Oracle数据类型的对应关系
    [转]SQL Server 2005 从差异备份还原数据库
    疲惫
    关于在cmd命令里的路径包含空格的问题
    导Excel时的科学计数法问题
    [转]SQL SERVER 2005 备份与恢复简介
    [转]用C#创建Windows Service
    [转] vb.net option
    [转]sql server profiler only TrueType fonts are supported. this is not a truetype font
    进程、线程、协程之概念理解[转帖]
  • 原文地址:https://www.cnblogs.com/luqingfei/p/1827867.html
Copyright © 2011-2022 走看看