解析C#中[],List,Array,ArrayList的区别及应用

[] 是针对特定类型、固定长度的。

List 是针对特定类型、任意长度的。

Array 是针对特定类型、固定长度的。

ArrayList 是针对任意类型、任意长度的。

Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换。

应用示例

复制代码代码如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Collections;

public partial class _Default : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        // System.Int32 是结构 
        int[] arr = new int[] { 1, 2, 3 }; 
        Response.Write(arr[0]); // 1 
        Change(arr); 
        Response.Write(arr[0]); // 2

// List 的命名空间是 System.Collections.Generic 
        List<int> list = new List<int>(); 
        list.Add(1); 
        list.Add(2); 
        list.Add(3); 
        Response.Write(list[0]); // 1 
        Change(list); 
        Response.Write(list[0]); // 2

// Array 的命名空间是 System 
        Array array = Array.CreateInstance(System.Type.GetType("System.Int32"), 3); // Array 是抽象类,不能使用 new Array 创建。 
        array.SetValue(1, 0); 
        array.SetValue(2, 1); 
        array.SetValue(3, 2); 
        Response.Write(array.GetValue(0)); // 1 
        Change(array); 
        Response.Write(array.GetValue(0)); // 2

// ArrayList 的命名空间是 System.Collections 
        ArrayList arrayList = new ArrayList(3); 
        arrayList.Add(1); 
        arrayList.Add(2); 
        arrayList.Add(3); 
        Response.Write(arrayList[0]); // 1 
        Change(arrayList); 
        Response.Write(arrayList[0]); // 2 
    }

private void Change(int[] arr) 
    { 
        for (int i = 0; i < arr.Length; i++) 
        { 
            arr[i] *= 2; 
        } 
    }

private void Change(List<int> list) 
    { 
        for (int i = 0; i < list.Count; i++) // 使用 Count 
        { 
            list[i] *= 2; 
        } 
    }

private void Change(Array array) 
    { 
        for (int i = 0; i < array.Length; i++) // 使用 Length 
        { 
            array.SetValue((int)array.GetValue(i) * 2, i); // 需要类型转换 
        } 
    }

private void Change(ArrayList arrayList) 
    { 
        for (int i = 0; i < arrayList.Count; i++) // 使用 Count 
        { 
            arrayList[i] = (int)arrayList[i] * 2; // 需要类型转换 
        } 
    } 
}

另外。

把一个对象数组转换成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对象数组。

时间: 2024-10-22 06:30:45

解析C#中[],List,Array,ArrayList的区别及应用的相关文章

【转载】C#中[],List,Array,ArrayList的区别及应用

本篇文章主要是对C#中[],List,Array,ArrayList的区别及应用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换.

Java中Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复. 3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

(转)解析php中die(),exit(),return的区别

本篇文章是对php中die(),exit(),return的区别进行了详细的分析介绍,需要的朋友参考下 die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回值了,但是也不会运行后续代码exit(0):正常运行程序并退出程序:exit(1):非正常运行导致退出程序:return():返回函数,若在主函数中,则会退出函数并返回一值.详细说:  1. re

Java中Vector与ArrayList的区别详解

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体实现类的相关区别如下:1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

【语言】Java中Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数 组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

Java中LinkedList和ArrayList的区别

首先亮一下他们两个基本区别,面试的时候可以用来和面试官唠嗑啊 1.ArrayList实现了基本动态数组结构,Linked基于链表的结构.链表?什么是链表?答:"链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中指针连接次序实现的"注:此句话通过了科普中国百科科学词条编写与应用工作项目的审核. 2.对于get和set,ArrayList的性能优于LinkedList,因为Linked要移动指针,麻烦的很 3.对于add和remove,LinkedList要优

Java中List和ArrayList的区别

List是一个接口,而ListArray是一个类. ListArray继承并实现了List. 所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造. List list;     //正确   list=null; List list=new List();    //   是错误的用法 List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List.此时它是一个List对象了,有些ArrayList

详细解析Java中抽象类和接口的区别

在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.

[转]详细解析Java中抽象类和接口的区别

在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解.对于设计意图的理解是否正确.合理