详解c#中Array,ArrayList与List的区别、共性与相互转换

详解c#中Array,ArrayList与List的区别、共性与相互转换

区别

  1. Array是定长的,一旦分配完内存大小,就不能再改变,而ArrayList、List是动态长度数组。
  2. Array中只能存储单一数据类型,而ArrayList、List则可以存储不同类型的数据。
  3. ArrayList内部存储对象,每次使用都需要进行拆箱和装箱操作,而List则是类型安全的,不需要进行拆箱和装箱操作。
  4. Array性能优于ArrayList、List,这是由于Array存储的是静态类型,内存空间是连续分配的,而ArrayList、List需要额外的内存空间来存储元数据,这种开销很大程度上增加了操作的耗时。

共性

  1. 都是可以存储一组数据的数据结构。
  2. 都可以通过下表进行访问,下标从0开始计数。
  3. 都可以使用foreach遍历。
  4. 都是支持泛型的。

相互转换

Array和ArrayList的相互转换

// 将Array转换为ArrayList
int[] arr = {1, 2, 3, 4};
ArrayList arrayList = new ArrayList(arr);

// 将ArrayList转换为Array
int[] anotherArr = (int[])arrayList.ToArray(typeof(int));

Array和List的相互转换

// 将Array转换为List<T>
int[] arr = {1, 2, 3, 4};
List<int> list = new List<int>(arr);

// 将List<T>转换为Array
int[] anotherArr = list.ToArray();

示例说明

示例1:在计算学生的平均成绩时,使用List实现

代码示例如下:

List<int> grades = new List<int>();
grades.Add(85);
grades.Add(92);
grades.Add(78);
grades.Add(90);

int sum = 0;
foreach (int grade in grades) {
    sum += grade;
}

double average = (double)sum / grades.Count;
Console.WriteLine("The average grade is: " + average);

示例2:使用Array实现冒泡排序

代码示例如下:

int[] arr = {5, 3, 8, 4, 2};
for (int i = 0; i < arr.Length - 1; i++) {
    for (int j = 0; j < arr.Length - i - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

foreach (int num in arr) {
    Console.Write(num + " ");
}

以上就是c#中Array、ArrayList和List的区别、共性和相互转换的详细讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解c#中Array,ArrayList与List的区别、共性与相互转换 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • Unity多语言转换工具的实现

    Unity多语言转换工具的实现攻略 背景 在Unity游戏开发应用途中,多语言支持是必不可少的功能,为了能够让游戏适应不同的国家或地区,我们需要使用多语言转换工具实现简单的针对不同语言的转换和输出。 实现方法 我们可以通过以下步骤实现Unity多语言转换工具: 1. 创建语言文件 先在项目中创建多个不同语言的语言文件(如中文语言文件、英文语言文件等),并将这…

    C# 2023年5月31日
    00
  • C#的自定义语法糖的使用详解

    C#的自定义语法糖的使用详解 什么是自定义语法糖? 自定义语法糖是指一种用于简化特定代码块的特殊语法。在C#中,通过定义类似于函数的“扩展方法”或者特殊的属性,可以提供更加便捷、易读的代码实现方式。 如何使用自定义语法糖? 通过编写自己的扩展方法或者属性,可以使用自定义的语法糖。以下是具体的实现步骤。 定义扩展方法 通过以下代码定义一个简单的扩展方法,用于在…

    C# 2023年6月6日
    00
  • 详解C# 利用反射根据类名创建类的实例对象

    详解C# 利用反射根据类名创建类的实例对象 在C#中,反射是一个重要的特性,可以让我们在运行时动态地加载和分析程序集。利用反射可以实现在运行时根据类名创建对象的目的。本篇文章将详细讲解利用反射根据类名创建类的实例对象的完整攻略。 步骤一:获取类型信息 使用反射创建实例对象的第一步是获取类型信息。在C#中,Type类表示一个类型的元数据。我们可以使用Type.…

    C# 2023年6月1日
    00
  • Asp.Net Cache缓存使用代码

    接下来我将为您讲解Asp.Net Cache缓存使用代码的完整攻略。 Asp.Net Cache缓存简介 首先,我们来了解一下Asp.Net Cache缓存。 缓存是一种常见的优化技术,通过将经常使用的数据缓存到内存中,以提高系统的性能和响应速度。而Asp.Net提供了一个Cache对象来实现缓存功能。 Asp.Net的Cache对象是一个全局对象,可以在所…

    C# 2023年5月31日
    00
  • .net如何优雅的使用EFCore实例详解

    以下是关于“.NET如何优雅地使用EFCore实例详解”的完整攻略: 1. 什么是EFCore? EFCore是.NET平台上的一个ORM(对象关系映射)框架,它可以将数据库中的数据映射到.NET对象中,使得开发人员可以使用.NET对象来操作数据库,而不必直接操作数据库。 2. 如何使用EFCore? 在.NET中,可以使用EFCore来操作数据库。可以按照…

    C# 2023年5月12日
    00
  • Asp.Net 动态页面转静态页面主要代码

    Asp.Net 动态页面转静态页面的主要代码可以分为以下三个步骤: 定义Route规则 在Global.asax.cs文件中的Application_Start方法中添加Route规则,将动态页面的URL地址与对应的Controller及Action方法进行绑定。例如下方的示例定义了将URL地址为”/article/{id}”的动态页面绑定到了HomeCon…

    C# 2023年5月31日
    00
  • 解析C#中@符号的几种使用方法详解

    解析C#中@符号的几种使用方法详解 什么是@符号 在C#的语法中,@符号表示对一个字符串进行特殊处理。具体地讲,它可以将一个字符串中的转义字符忽略掉,也可以使一个字符串中的关键字变成非关键字。 @符号的使用方法 1. 忽略字符串中的转义字符 我们知道,在普通的字符串中,转义字符需要使用反斜杠进行转义,比如: string str1 = "这是一个带…

    C# 2023年6月8日
    00
  • c#源码的执行过程详解

    c#源码的执行过程详解 1. 源代码编译过程 C#是一种基于CLR(公共语言运行时)的编程语言,它的源代码编译过程分为两个阶段:编译阶段和运行时阶段。 1.1 编译阶段 在C#中,源代码必须先被编译成微软中间语言(MSIL)或CIL(公共中间语言)代码。MSIL代码是CLR的执行代码,它不是本地机器代码,而是被CLR解释执行的代码。因此,编译后的代码可以在任…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部