C# ArrayList 教程及示例

⚡ 智能摘要

C# 中的 ArrayList 是 System.Collections 命名空间中的一个动态集合,它将元素存储为对象。与数组不同,ArrayList 会在运行时自动增长和缩小,并且可以在一个列表中同时存储整数、字符串和布尔值。

  • 🔄 动态尺寸: ArrayList 在运行时添加和删除元素,因此您无需像数组那样预先固定项目数量。
  • 📦 对象存储: 每个元素都存储为一个对象,这使得一个 ArrayList 可以保存混合数据类型,例如 int、string 和 bool。
  • 核心方法: Add、Insert、Remove、RemoveAt、Contains 和 Sort 涵盖了 ArrayList 的日常操作。
  • 📊 数量和容量: Count 属性返回当前项目数,而 Capacity 是已分配的存储空间。
  • 现代之选: Microsoft 建议在新代码中使用泛型 List,因为它增加了编译时类型安全性并避免了装箱。
  • 🤖 人工智能辅助: GitHub Copilot 生成 ArrayList 代码,ML.NET 管道通过 C# 集合类型传递数据。

C# ArrayList

C# 中的 ArrayList 是什么?

ArrayList 集合类似于 阵列 C# 中的数据类型. 最大的区别在于数组列表集合的动态特性。

对于数组,您需要在声明数组时定义数组可以容纳的元素数量。但是对于数组列表集合,则无需事先完成此操作。可以随时从数组列表集合中添加或删除元素。让我们更详细地了解数组列表集合可用的操作。

数组列表的声明

下面提供了 ArrayList 的声明。借助 ArrayList 数据类型创建数组列表。使用“new”关键字创建 ArrayList 对象。然后将该对象分配给变量 a1。因此现在变量 a1 将用于访问数组列表的不同元素。

ArrayList a1 = new ArrayList()

向数组添加元素

add 方法用于向 ArrayList 添加元素。add 方法可用于将任何类型的数据类型元素添加到数组列表中。因此,您可以向数组列表中添加一个整数、一个字符串,甚至一个布尔值。add 方法的一般语法如下

ArrayList.add(element)

以下是“add”方法的一些使用示例。add 方法可用于将各种数据类型添加到 Array List 集合中。

下面您可以看到如何将整数字符串甚至布尔值添加到数组列表集合的示例。

  • a1.add(1) – 这将向集合中添加一个整数值
  • a1.add(“Example”)——这将向集合中添加一个字符串值
  • a1.add(true) – 这将向集合中添加一个布尔值

现在让我们看看它在代码层面是如何工作的。下面提到的所有代码都将写入我们的控制台应用程序。代码将写入我们的 Program.cs 文件。

在下面的程序中,我们将编写代码来创建一个新的数组列表。我们还将展示如何添加元素并显示数组列表的元素。

C# 中的 ArrayList

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1[0]);	  
   Console.WriteLine(a1[1]);
   Console.WriteLine(a1[2]);
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 第一步是声明我们的数组列表。这里我们将 a1 声明为一个变量来保存数组列表的元素。
  2. 然后我们使用 add 关键字将数字 1、字符串“Example”和布尔值“true”添加到数组列表中。
  3. 然后,我们使用 Console.WriteLine 方法将每个数组列表元素的值显示到控制台。您会注意到,就像数组一样,我们可以通过元素的索引位置来访问它们。因此,要访问数组列表的第一个位置,我们使用 [0] 索引位置。依此类推。

如果正确输入上述代码并运行程序,将显示以下输出。

输出:

C# 中的 ArrayList

从输出中,您可以看到数组列表中的所有元素都已发送到控制台。

让我们看一下 ArrayList 中可用的其他一些方法。

计数

此方法用于获取 ArrayList 集合中的项目数。以下是此语句的一般语法。

ArrayList.Count() – 此方法将返回数组列表包含的元素数量。

包含

此方法用于查看元素是否存在于 ArrayList 集合中。以下是此语句的一般语法

ArrayList.Contains(element) – 如果元素存在于列表中,则此方法将返回 true,否则将返回 false。

移除

此方法用于删除 ArrayList 集合中特定位置的元素。以下是此语句的一般语法

ArrayList.RemoveAt(index) – 此方法将从数组列表的特定位置删除一个元素。

现在让我们看看它在代码层面是如何工作的。下面提到的所有代码都将写入我们的控制台应用程序。代码将写入我们的 Program.cs 文件。

在下面的程序中,我们将编写代码来了解如何使用上述方法。

C# 中的 ArrayList

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1.Count);
   Console.WriteLine(a1.Contains(2));
   Console.WriteLine(a1[1]);
   a1.RemoveAt(1);
   Console.WriteLine(a1[1]);
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 因此,我们看到的第一个属性是 Count 属性。我们获取数组列表 a1 的 Count 属性,然后将其写入控制台。
  2. 在第二部分中,我们使用 Contains 方法来查看 ArrayList a1 是否包含元素 2。然后我们通过 Writeline 命令将结果写入控制台。
  3. 最后,为了展示删除元素的方法,我们执行以下步骤,
    1. 首先,我们将数组列表索引位置 1 处的元素的值写入控制台。
    2. 然后我们删除数组列表中索引位置 1 处的元素。
    3. 最后,我们再次将数组列表索引位置 1 处的元素的值写入控制台。这组步骤将让您清楚地了解 remove 方法是否能正常工作。

如果正确输入上述代码并运行程序,将显示以下输出。

输出:

C# 中的 ArrayList

为什么最后一个值是真?

如果您查看事件序列,元素 Example 将从数组中删除,因为它位于位置 1。然后,数组的位置 1 被之前位于位置 2 的内容替换,该内容的值为“true”

如何在 C# 中遍历 ArrayList

读取 ArrayList 中的每个元素是一项常见任务。由于 ArrayList 将元素存储为对象,因此可以使用 foreach 循环或使用带有 Count 属性的 for 循环来访问它们。foreach 循环是最简单的方法,因为它按顺序遍历每个元素,而无需索引。

以下示例创建了一个字符串 ArrayList,并将每个值打印在单独的行上。该代码编写在控制台应用程序的 Program.cs 文件中。

步骤1) 导入 System.Collections 命名空间并创建一个包含三个元素的 ArrayList。

步骤2) 使用 foreach 循环将每个元素读取为对象并写入控制台。

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add("Java");
   a1.Add("Python");
   a1.Add("Kotlin");
   foreach (object item in a1)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 已导入 System.Collections 命名空间,以便程序可以使用 ArrayList 类型。
  2. 使用 Add 方法将三个字符串值添加到 ArrayList 中。
  3. foreach 循环将每个项目读取为一个对象,Console.WriteLine 方法将其打印在新行上。

程序运行时,它会打印以下内容: Java, PythonKotlin 分别写在不同的行上。使用带有 Count 属性的 for 循环可以得到相同的结果,同时还可以使用每个元素的索引位置。

C# ArrayList 方法和属性

ArrayList 类提供了许多内置方法和属性来管理其元素。除了添加和删除元素之外,它还可以对集合进行排序、搜索和反转。最常用的成员如下所示。

会员 描述
添加 在 ArrayList 的末尾添加一个元素。
插页 在指定索引位置添加元素。
删除 删除特定元素的首次出现。
移除 删除指定索引位置的元素。
透明 从 ArrayList 中移除所有元素。
排序 按升序对元素进行排序。
Reverse Reverses 是列表中元素的顺序。
包含 如果给定元素存在于列表中,则返回 true。
索引 返回给定元素的索引位置。
计数 返回已存储元素数量的属性。
容量 返回列表可容纳元素数量的属性。

这些成员允许您添加、查找、排序和删除项目,而无需自己编写逻辑,这是使用集合而不是普通数组的主要优势之一。

C# 中 ArrayList 和 List 的区别

既可以是 ArrayList,也可以是泛型 列表 它们都支持存储运行时可扩展的项集,但它们处理类型的方式有所不同。了解这些差异有助于您为现代 C# 代码选择合适的存储方案。

主要区别如下:

  • 型式安全: ArrayList 将每个项目存储为一个对象,而 List 则绑定到一个已声明的类型,并在编译时进行检查。
  • 性能: ArrayList 会对 int 等值类型进行装箱和拆箱操作,这会消耗时间,而 List 则避免了装箱操作,从而提高了速度。
  • 空间: ArrayList 存在于 System.Collections 中,而 List 存在于 System.Collections.Generic 中。
  • 铸造: 从 ArrayList 中读取数据通常需要强制转换回原始类型,但 List 可以直接返回正确的类型。
  • 建议: Microsoft 建议在新开发中使用列表,因为它更安全、更快速、更易于阅读。

简而言之,ArrayList 适用于理解旧代码或混合类型存储,而 List 是当今大多数应用程序的首选。

常见问题

数组的大小是固定的,并且在声明时就设定好了一种数据类型。ArrayList 则在运行时会根据情况增长和缩小,并且将每个元素都存储为一个对象,因此它可以在一个列表中存储混合的数据类型。

ArrayList 不会被删除,但是 Microsoft 不建议在新开发项目中使用。System.Collections.Generic 中的泛型 List 类更佳,因为它提供了类型安全性和更好的性能,因此大多数现代 C# 代码都使用 List 类。

由于 ArrayList 将元素存储为对象,因此添加诸如 int 之类的值类型会将其包装在一个对象中,这称为装箱。将其读取并强制转换为原始类型则称为拆箱。这两个步骤都会降低性能,而 List 则避免了这一点。

ArrayList 支持多个读取器同时读取,但当集合被修改时,实例成员不能保证线程安全。为了确保多线程写入的安全,请将其包装在 ArrayList 中。Sync可以使用传统方法,或者改用并发集合。

Count 是 ArrayList 中当前存储的元素数量。Capacity 是 ArrayList 在调整大小之前可以容纳的元素总数。Capacity 始终等于或大于 Count,并且会随着添加元素而自动增长。

您可以使用 `Cast` 和 `ToList` 方法将元素复制到强类型列表 `List` 中,或者调用 `ToArray` 方法获取对象数组。转换为泛型列表很常见,因为它能恢复类型安全。

是的。GitHub Copilot 可以根据简短的注释或方法名自动生成 ArrayList 声明、添加和删除调用以及循环。它通常还会建议使用泛型 List 版本,因为这是新建 C# 代码的推荐集合类型。

ML.NET 通常通过 List 和 IEnumerable 等泛型集合读取训练数据,这些集合映射到其 IDataView 管道。很少直接使用非泛型的 ArrayList,因为强类型集合能够保持机器学习数据的清晰性和类型安全性。

总结一下这篇文章: