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#应用程序至关重要。

相关推荐
爱吃生蚝的于勒6 分钟前
C语言最简单的扫雷实现(解析加原码)
c语言·开发语言·学习·计算机网络·算法·游戏程序·关卡设计
Ai 编码助手9 分钟前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm12 分钟前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm12 分钟前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database
何曾参静谧12 分钟前
「QT」文件类 之 QDir 目录类
开发语言·qt
何曾参静谧14 分钟前
「QT」文件类 之 QTemporaryDir 临时目录类
开发语言·qt
杜杜的man16 分钟前
【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
开发语言·后端·golang
qq_3089574717 分钟前
Gin 框架入门(GO)-1
开发语言·golang·gin
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
java·开发语言·jvm·vue.js·spring boot·spring cloud·开源
monkey_meng1 小时前
【Rust中的项目管理】
开发语言·rust·源代码管理