详解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日

相关文章

  • C#使用远程服务调用框架Apache Thrift

    使用远程服务调用框架Apache Thrift的完整攻略需要经过以下步骤: 步骤一:安装和配置Apache Thrift Apache Thrift可以在官网上下载,下载链接:https://thrift.apache.org/download 安装完毕后,需要配置环境变量。配置完成后,在命令行中输入thrift -version可以查看全局的Thrift版…

    C# 2023年6月1日
    00
  • C#实现俄罗斯方块基本功能

    C#实现俄罗斯方块基本功能的攻略可以分为以下几个步骤: 第一步:搭建基本框架 创建一个控制台应用程序项目,或者一个 WPF/WinForms 窗体应用程序项目。 在项目中创建 Block 类,该类代表一个俄罗斯方块方块。 在项目中创建 GameBoard 类,该类代表整个游戏面板。 在项目中创建 GameManager 类,该类负责游戏逻辑,如方块下落、旋转…

    C# 2023年6月1日
    00
  • c# datetime 格式化大全

    当涉及到 c# 的 datetime 格式化时,需要了解一些预定义的格式字符串、定界符和格式说明符。 预定义格式字符串 d 使用短日期格式显示日期:“yyyy/MM/dd” D 使用长日期格式显示日期:“yyyy’年’M’月’d’日’” f 使用长日期格式和短时间格式显示日期时间:“yyyy’年’M’月’d’日’ H:mm” F 使用长日期格式和长时间格式显…

    C# 2023年6月1日
    00
  • C# Directory.GetFiles – 获取目录下的所有文件

    Directory.GetFiles 方法是 C# 中用于返回指定文件夹中所有文件的方法,下面是它的基本语法和参数说明: public static string[] GetFiles(string path); public static string[] GetFiles(string path, string searchPattern); publi…

    C# 2023年4月19日
    00
  • 浅谈C#设计模式之开放封闭原则

    浅谈C#设计模式之开放封闭原则 开放封闭原则(Open Closed Principle,OCP)是设计模式中非常重要的一条原则,它强调软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,当需求发生变化时,我们应该添加新的代码而不是修改已有的代码。这样能够保证系统的稳定性和可扩展性。 开放封闭原则的核心思想 开放封闭原则的核心思想可归纳为两个方…

    C# 2023年5月15日
    00
  • 如何在.NET Core中为gRPC服务设计消息文件(Proto)

    在.NET Core中,使用gRPC框架可以轻松地创建跨平台的高性能微服务。在使用gRPC时,消息文件(Proto)的设计非常重要,因为它直接影响到服务的交互和数据格式。 下面是在.NET Core中为gRPC服务设计消息文件(Proto)的完整攻略: 1.安装gRPC工具 首先需要安装gRPC工具,可以通过以下命令安装: dotnet tool insta…

    C# 2023年6月3日
    00
  • .NET Core跨平台串口通讯使用SerialPortStream基础类库问题解决

    .NET Core 跨平台串口通讯使用 SerialPortStream 基础类库问题解决 在 .NET Core 中,可以使用 SerialPortStream 基础类库来实现跨平台串口通讯。但是,在使用 SerialPortStream 基础类库时,可能会遇到一些问题。本攻略将详细讲解 .NET Core 跨平台串口通讯使用 SerialPortStre…

    C# 2023年5月17日
    00
  • C#中lock用法详解

    C#中lock用法详解 什么是lock? 在C#中,lock用于控制多线程访问共享资源的同步。如果一个线程进入到了一个使用lock控制同步的代码块中,那么其他线程将会被阻塞,直到这个线程离开这个代码块为止。 lock的基本使用方式 lock语法的基本形式为: lock (lockObject) { // 处理共享资源的代码 } 其中,lockObject是一…

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