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

时间:2022-07-29 16:24:10 

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

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对象数组。

标签:List,Array,ArrayList
0
投稿

猜你喜欢

  • Android 利用ViewPager+GridView实现首页导航栏布局分页效果

    2021-08-05 09:39:07
  • 一步步教你写Slack的Loading动画

    2023-04-27 06:56:30
  • 详解Spring Cloud Gateway基于服务发现的默认路由规则

    2022-10-27 06:10:53
  • 在C#中使用Channels的完整教程

    2021-11-03 15:41:28
  • 全面解析java final关键字

    2023-03-16 03:04:55
  • Spring Security OAuth 自定义授权方式实现手机验证码

    2021-10-03 23:30:27
  • Opencv光流运动物体追踪详解

    2023-06-21 11:55:31
  • 基于Spring的注解@Qualifier小结

    2022-12-20 23:17:50
  • C#格式化json字符串的方法分析

    2023-12-23 00:20:36
  • JVM Tomcat性能实战(推荐)

    2022-02-11 22:34:02
  • 200行Java代码如何实现依赖注入框架详解

    2022-08-28 01:22:42
  • C#实现基于IE内核的简单浏览器完整实例

    2021-12-04 02:08:02
  • Android入门之计时器Chronometer的使用教程

    2023-09-06 10:56:43
  • swagger如何返回map字段注释

    2023-02-22 08:56:27
  • MyBatis传入参数为List对象的实现

    2021-12-14 20:16:06
  • spring boot启动加载数据原理分析

    2021-06-16 07:56:15
  • 浅谈Spring Boot 开发REST接口最佳实践

    2021-10-08 12:24:35
  • C++函数指针和回调函数使用解析

    2022-11-16 21:01:15
  • Jenkins的安装配置详解

    2023-08-27 11:31:42
  • SpringBoot+easypoi实现数据的Excel导出

    2023-04-05 12:27:19
  • asp之家 软件编程 m.aspxhome.com