当前位置: 首页 > news >正文

C#中的数组探索

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

数组定义与赋值

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

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

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

vowels[0] = 'a';
vowels[1] = 'e';
// ... 其余以此类推

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

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

默认初始化

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

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

索引与范围

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

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

多维数组

矩形数组

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

int[,] matrix = new int[3, 3]; // 3x3的整数矩阵

锯齿形数组

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

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关键字结合初始化器可以简化数组声明,特别是当类型明显时:

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

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

var matrix2D = new[,]
{{1, 2, 3},{4, 5, 6},{7, 8, 9}
};

边界检查

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

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

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

http://www.lryc.cn/news/359128.html

相关文章:

  • 身份认证与口令攻击
  • 卷积网络迁移学习:实现思想与TensorFlow实践
  • Ansible04-Ansible Vars变量详解
  • Flutter 中的 SliverCrossAxisGroup 小部件:全面指南
  • 开源还是闭源这是一个问题
  • 数据结构与算法笔记:基础篇 - 栈:如何实现浏览器的前进和后退功能?
  • 【AIGC】大型语言模型在人工智能规划领域模型生成中的探索
  • 从零开始学习Slam-旋转矩阵旋转向量四元组(二)
  • 基于Spring Security添加流控
  • Python | Leetcode Python题解之第119题杨辉三角II
  • 物联网应用系统与网关
  • 系统稳定性概览
  • Redis-Cluster模式基操篇
  • Golang | Leetcode Golang题解之第113题路径总和II
  • 云计算与 openstack
  • golang语言的gofly快速开发框架如何设置多样的主题说明
  • lynis安全漏洞扫描工具
  • C++ 多重继承的内存布局和指针偏移
  • centos时间不对
  • 通过Redis实现防止接口重复提交功能
  • 如何构建最小堆?
  • 基于Netty实现安全认证的WebSocket(wss)客户端
  • 代码随想录算法训练营第四十四天 | 01背包问题 二维、 01背包问题 一维、416. 分割等和子集
  • redis常见使用场景
  • 模糊C均值(FCM)算法更新公式推导
  • 金融创新浪潮下的拆分盘投资探索
  • 一份不知道哪里来的第十五届国赛模拟题
  • 机器人动力学模型与MATLAB仿真
  • SAPUI5基础知识3 - 引导过程(Bootstrap)
  • ABAP 借助公司封装的钉钉URL,封装的RFC给钉钉发送消息