C# 和 .NET 提供了许多不同的集合类型。 数组包含由语言定义的语法。 泛型集合类型列在
System.Collections.Generic 命名空间中。 专用集合包括 System.Span<T>(用于访问堆栈帧上的连续内存),以及
System.Memory<T>(用于访问托管堆上的连续内存)。 所有集合(包括数组、Span<T> 和 Memory<T>)都遵循
一种统一的迭代原则。 使用 System.Collections.Generic.IEnumerable<T> 接口。 这种统一的原则意味着任何集
合类型都可以与 LINQ 查询或其他算法一起使用。 你可以使用 IEnumerable<T> 编写方法,这些算法适用于任何
集合。
数组是一种数据结构*_,其中包含许多通过计算索引访问的变量。 数组中的变量(亦称为数组的“元素”)均为同一
种类型。 我们将这种类型称为数组的“元素类型”。
数组类型是引用类型,声明数组变量只是为引用数组实例预留空间。 实际的数组实例是在运行时使用 new 运算
符动态创建而成。 new 运算指定了新数组实例的长度,然后在此实例的生存期内固定使用这个长度。 数组元素
的索引介于 0 到 Length - 1 之间。 new 运算符自动将数组元素初始化为其默认值(例如,所有数值类型的默
认值为 0,所有引用类型的默认值为 null )。
以下示例创建 int 元素数组,初始化此数组,然后打印此数组的内容。
此示例创建并在“一维数组”上进行操作。 C# 还支持多维数组。 数组类型的维数(亦称为数组类型的秩)是 1 与数
组类型方括号内的逗号数量相加的结果。 以下示例分别分配一维、二维、三维数组。
a1 数组包含 10 个元素, a2 数组包含 50 个元素 (10 × 5), a3 数组包含 100 个元素 (10 × 5 × 2)。 数组的元
素类型可以是任意类型(包括数组类型)。 包含数组类型元素的数组有时称为“交错数组”,因为元素数组的长度不
必全都一样。 以下示例分配由 int 数组构成的数组: