zoukankan      html  css  js  c++  java
  • 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList

    概述
    这篇文章解释如何使用最简单的方法把Array转换成ArrayList和相反的转换。

    使用的.NET类
    System.Collections.ArrayList

    介绍
    操作数组是应用开发中最普通的任务之一。有时你需要使用一组对象来获得操作对象的属性的能力,并且有时你为了更大的灵活性而使用ArrayList。在这两种方式之间进行抉择是非常痛苦的事情。这篇文章教你如何更好的去解决这个问题。

    笨方法
    几乎所有的初学者都是手工进行的变换。就从转换对象数组到ArrayList来说,一种方法可能是先初始化一个ArrayList对象,然后再循环把数组里的每一个对象添加到ArrayList中。
    让我们假设我们有一个称做Person的对象。下面是通常的做法:

    1Person[] personArray = myPerson.GetPersons();
    2ArrayList personList = new ArrayList();
    3foreach(Person objPerson in personArray)
    4{
    5    personList.Add(objPerson);
    6}

    并且也可以使用这种方式从一个ArrayLIst创建一个对象数组:

    1Person[] personArrayFromList = new Person[personList.Count];
    2int arrayCounter = 0;
    3foreach(Person objPerson in personList)
    4{
    5    personArrayFromList.SetValue(objPerson,arrayCounter++);
    6}

    简单的方法
    但是我们为什么不使用.NET类库内置的方法来实现这个功能呢?
    把一个对象数组转换成ArrayList可以使用ArrayList.Adapter方法。这个方法把一个IList包裹在一个ArrayLIst里。现在上面的代码就可以写成:

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

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

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

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

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

    PS:

    字符串转换为数组:
    VB.NET
    Dim str As Atring = "Table,Item,ID"
    Dim arr() As String
    arr= str.Split(Convert.ToChar(","))

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

  • 相关阅读:
    memcpy()
    size_t
    malloc_in_function.c
    nginx反向代理配置去除前缀
    比反射更强大的技术,内省技术
    比反射更强大的技术,内省技术
    Android:手把手带你全面学习常见的RecylerView!
    Android:手把手带你全面学习常见的RecylerView!
    JS的类型转换,强制转换和隐式转换
    JS的类型转换,强制转换和隐式转换
  • 原文地址:https://www.cnblogs.com/Liao/p/2158340.html
Copyright © 2011-2022 走看看