C#中的数组探索

在C#编程语言中,数组是一种基本的数据结构,用于存储固定大小的同类型元素序列。本文将深入探讨C#数组的各个方面,包括定义、赋值、范围操作、切片、多维数组(矩形与锯齿形)、简化初始化表达式以及边界检查。

数组定义与赋值

数组在C#中是通过指定元素类型和数组长度来定义的。以下是一个定义并初始化字符数组的例子:

csharp 复制代码
char[] vowels = new char[5]; // 定义一个长度为5的字符数组

接下来,我们可以通过索引来逐个赋值:

csharp 复制代码
vowels[0] = 'a';
vowels[1] = 'e';
// ... 其余以此类推

或者直接在声明时初始化数组:

csharp 复制代码
char[] vowels1 = new[] { 'a', 'e', 'i', 'o', 'u' }; // 声明并立即填充数组
char[] vowels2 = { 'a', 'e', 'i', 'o', 'u' }; // 简化语法,编译器会推断类型

默认初始化

未明确初始化的数组元素会被赋予其类型的默认值。例如,整数数组的所有元素默认为0:

csharp 复制代码
int[] a = new int[1000]; // 默认初始化所有元素为0
Console.WriteLine(a[128]); // 输出0

索引与范围

数组元素通过索引访问,索引从0开始。C#还支持数组切片,尽管不如Python等语言直接,但可以通过循环或LINQ实现类似功能。直接访问示例:

csharp 复制代码
char[] vowels3 = { 'a', 'e', 'i', 'o', 'u' };
Console.WriteLine(vowels3[1]); // 输出'e'

多维数组

矩形数组

矩形数组即元素数量在每个维度上都相同的数组。定义如下:

csharp 复制代码
int[,] matrix = new int[3, 3]; // 3x3的整数矩阵

锯齿形数组

锯齿形数组允许每行有不同的列数。它是一个数组的数组,各子数组长度可以不同:

csharp 复制代码
int[][] jaggedArray = new int[3][]; // 声明一个包含3个子数组的锯齿形数组
jaggedArray[0] = new int[3] { 1, 2, 3 };
jaggedArray[1] = new int[2] { 4, 5 };
jaggedArray[2] = new int[1] { 6 };

简化数组初始化表达式

使用var关键字结合初始化器可以简化数组声明,特别是当类型明显时:

csharp 复制代码
var vowels4 = new[] { 'a', 'e', 'i', 'o', 'u' }; // 使用var,类型由右侧的初始值推断

对于多维数组,也可以采用类似的简化方式:

csharp 复制代码
var matrix2D = new[,]
{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

边界检查

C#在访问数组元素时执行边界检查,以防止索引越界。尝试访问超出数组界限的元素会抛出IndexOutOfRangeException异常:

csharp 复制代码
try
{
    Console.WriteLine(vowels3[5]); // 尝试访问不存在的索引
}
catch (IndexOutOfRangeException e)
{
    Console.WriteLine($"错误:{e.Message}");
}

总结而言,C#数组提供了灵活且强大的数据存储方式,支持多种初始化方式、多维数组结构以及自动边界检查,确保了程序的安全性和易用性。正确理解和应用这些特性,对于构建高效、健壮的C#应用程序至关重要。

相关推荐
Wang's Blog44 分钟前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
code bean1 小时前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#
吃好睡好便好3 小时前
MATLAB中图像的读取、写入和显示
开发语言·图像处理·学习·计算机视觉·matlab
yaoxin5211234 小时前
476. Java 反射 - 调用方法
java·开发语言
猫头虎4 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作
吴可可1235 小时前
C# CAD二次开发:合并首尾重合多段线
c#
bksczm5 小时前
Linux之日志和线程池、内存池
java·开发语言
笨蛋不要掉眼泪5 小时前
Java虚拟机:对象复活、引用强度与Stop-The-World
java·开发语言·jvm
code_pgf5 小时前
C/C++ 常用容器功能汇总
c语言·开发语言·c++
布朗克1685 小时前
Go 入门到精通-33-unsafe 与 CGO
开发语言·后端·golang·unsafe·cgo