请解释C#中数组的长度和范围是如何定义的?
在 C# 中,数组的长度和范围的定义涉及到数组的基础特性以及相关属性和索引的使用。以下是对数组长度和范围的详细说明:
1.数组的长度
C# 中的数组是固定大小的,一旦声明,数组的大小(长度)就无法更改。数组的长度是指数组中元素的总数,包含在数组声明时分配的所有元素。
- 定义数组长度的方式: 数组的长度是在创建数组时定义的,例如:
- int[] numbers = new int[5]; // 长度为 5
- 通过属性获取长度: 可以使用 Length 属性获取数组的长度:
- Console.WriteLine(numbers.Length); // 输出: 5
- 多维数组的长度: 对于多维数组,Length 返回的是所有元素的总数,而 GetLength(int dimension) 方法可以获取指定维度的长度:
- int[,] matrix = new int[3, 4]; Console.WriteLine(matrix.Length); // 输出: 12 (总元素数) Console.WriteLine(matrix.GetLength(0)); // 输出: 3 (第1维长度) Console.WriteLine(matrix.GetLength(1)); // 输出: 4 (第2维长度)
2.数组的范围
数组的范围是指数组中有效索引值的范围。
- 一维数组的范围: 数组的索引从 0 开始,到 Length - 1 结束。例如:
- int[] numbers = new int[5]; // 长度为 5 // 有效范围为 0 到 4 numbers[0] = 1; // 有效 numbers[4] = 5; // 有效 // numbers[5] = 6; // 无效,抛出 IndexOutOfRangeException 异常
- 多维数组的范围: 每个维度的索引范围由对应维度的长度决定。例如:
- int[,] matrix = new int[3, 4]; // 3 行 4 列 // 第 1 维(行)的范围是 0 到 2 // 第 2 维(列)的范围是 0 到 3 matrix[0, 0] = 1; // 有效 matrix[2, 3] = 12; // 有效 // matrix[3, 3] = 13; // 无效,抛出 IndexOutOfRangeException 异常
- 基于范围的操作(切片): 从 C# 8.0 开始,数组支持基于范围的索引操作:
- int[] array = { 1, 2, 3, 4, 5 }; int[] slice = array[1..4]; // 从索引 1 到 4(不包括 4),结果为 { 2, 3, 4 }
3.常见问题
- 长度为零的数组: 数组可以声明为长度为零,表示数组中没有任何元素:
- int[] emptyArray = new int[0]; Console.WriteLine(emptyArray.Length); // 输出: 0
- 数组越界异常: 如果尝试访问超出有效范围的索引,C# 将抛出 IndexOutOfRangeException。
- int[] numbers = { 1, 2, 3 }; // Console.WriteLine(numbers[3]); // 抛出异常
总结
- 数组长度: 使用 Length 或 GetLength(int dimension) 获取。
- 数组范围: 索引从 0 到 Length - 1,多维数组需要分别考虑每个维度的范围。
- 边界检查: C# 提供内置边界检查功能,避免访问无效索引。
这使得 C# 的数组在操作时具有较高的安全性,同时也提供了多种方法来操作数组长度和范围。