C# Array和ArrayList区别

本文详细介绍了C#中Array和ArrayList的使用方法,包括数组的声明、初始化、赋值等基本操作,以及如何实现Array与ArrayList之间的转换。

一,C# array数组的用法范例:

type[]   typename=new type[size]; 

如int[] a=new int[2];string[] str=new string[5];

实事上我们平常是用int[],string[]...的,此时我们已经创建一个Array数组,只不过我们平常没有这种意识而已.

(1):type数据类型不能缺;且要统一,而不能是如 int[] a=new Array[];

(2):数组的大小size不能缺,否则c#认为是出错的,因为数组是一段固定长度的内存;

(3):右边是一个中括号[],而不是()

实例:


            //Array ar = new Array();//错误,无法创建抽象类或接口“System.Array”的实例
            //int[] array = new Array[3];错误,
            //int[] array = new Array[];错误,必须指定数组的大小或初始值
            //int[] array = new Array[3];//错误,无法转换为int[]
            //int[] array=new int[];//错误,必须指定数组的大小或初始值
            //平常我们int[],string[]...事实上就是声明一个array数组了


            int[] array = new int[5];
            //或int[] arr={1,2,3};
            for (int i = 0; i < 5; i++)
            {
                array[i] = i*100;//注:array数组并不提供add,clear,addRange..方法,而是直接设置或获取值
                Response.Write(array[i] + "<br>");
            }
            Response.Write(array.Length + "<br><br>");

 

 int [] intarray=new int[9];
     intarray[0]=10;
     intarray[1]=20;
     intarray[2]=30;
     intarray[3]=40;
     intarray[4]=50;
     intarray[5]=60;
     intarray[6]=70;
     intarray[7]=80;
     intarray[8]=90;

 

二,C# ArrayList数组的用法范例:

 ArrayList al = new ArrayList();
            for (int i = 0; i < 3; i++)
            {
                al.Add(i);
                Response.Write(al[i].ToString() + "<br>");//输出数组中的元素值
                // Response.Write(al[i]+ "<br>");
            }
            Response.Write(al.Count + "<br><br>");

            foreach (int obj in al)//或foreach (object obj in al),因为al是一个object类型的数组
            {
                Response.Write(obj+"-OK"+"<br>");
            }


三,ArrayList和Array相互之间的转化

         (1)以下是把ArrayList数组中的值拷贝到Array中去的实例用法

          //int[] IResult=new int[al.Count];
            //al.CopyTo(IResult);
            //或是用下面的方法
          int[] IResult = (int[])al.ToArray(typeof(Int32));//ToArray(Int32);这样错误,一定要强制类型转换
          //Person[] personArrayFromList = (Person[])personList.ToArray(typeof(Person));  

         foreach(int item   in IResult)
            {
              Response.Write(item.ToString());
            }

 

Response.Write("以下是把Array数组中的值拷贝到ArrayList中去的实例用法" + "<br>" + "结果为:<br>");

            int[] a ={ 222, 333, 555 };
            ArrayList arrList = new ArrayList();
            foreach (object obj in a)//或foreach (int obj in a)
            {
                arrList.Add(obj);
                Response.Write(obj+"<br>");
            }

### C# 中 List、ArrayList Array区别 #### 类型安全性与泛型支持 C# 中的 `Array` 是 .NET 中最早期的集合类型之一,它是一种固定大小的数据结构,可以存储相同类型的元素。然而,`Array` 不是类型安全的,例如在声明一个 `object[]` 数组时,可以在其中存储任何类型的对象,这可能导致运行时错误[^1]。 `ArrayList` 是一种非泛型的动态数组实现,同样允许存储任意类型的对象,因此也不具备类型安全性。例如,可以向 `ArrayList` 添加整数、字符串或其他对象,但在访问这些元素时必须手动进行类型转换,增加了潜在的运行时错误风险[^2]。 相比之下,`List<T>` 是泛型集合类,提供了编译时的类型检查,确保只能添加特定类型的元素。这种类型安全性避免了装箱拆箱操作类型转换错误,提高了代码的稳定性性能[^1]。 #### 性能与效率 由于 `Array` 是静态数据结构,其大小在创建后无法更改,因此在频繁插入或删除元素时效率较低。虽然可以通过重新分配新数组并复制元素来扩展大小,但这种方式会带来额外的性能开销[^1]。 `ArrayList` 支持动态调整大小,内部通过自动扩容机制管理容量增长。然而,由于每次添加或移除元素可能需要调整内部数组的大小,因此频繁操作仍会影响性能,尤其是在大量数据处理时[^2]。 `List<T>` 在性能方面通常优于 `ArrayList`,因为它避免了装箱拆箱操作。对于值类型(如 `int`、`struct`),`List<int>` 可以直接存储实际值,而 `ArrayList` 必须将每个值类型装箱为 `object` 才能存储,导致额外的内存分配垃圾回收压力[^1]。 #### 使用灵活性与功能丰富性 `Array` 提供了基本的索引访问遍历功能,但缺乏高级操作支持,例如排序、查找过滤等。开发者需要自行实现这些逻辑,或者借助 LINQ 进行查询操作[^1]。 `ArrayList` 虽然支持动态大小多种集合操作(如添加、删除、查找等),但由于其非泛型特性,使用起来不够直观且容易出错。此外,`ArrayList` 没有提供 LINQ 查询支持,限制了其在现代开发中的适用性[^2]。 `List<T>` 提供了丰富的内置方法,如 `Add`, `Remove`, `Sort`, `Find`, `ForEach` 等,并且完全支持 LINQ 查询,使得数据处理更加简洁高效。此外,`List<T>` 可以轻松地与泛型接口配合使用,适用于各种复杂的数据结构设计场景。 #### 示例代码对比 以下是一个使用 `Array`、`ArrayList` `List<T>` 存储整数的简单示例: ```csharp // 使用 Array int[] intArray = new int[3]; intArray[0] = 1; intArray[1] = 2; intArray[2] = 3; // 使用 ArrayList ArrayList arrayList = new ArrayList(); arrayList.Add(1); arrayList.Add("two"); // 非类型安全,可添加任意类型 arrayList.Add(3); // 使用 List<T> List<int> intList = new List<int>(); intList.Add(1); intList.Add(2); intList.Add(3); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值