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.mzph.cn/web/19748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为何懂行的人都在选海信Mini LED?

今年的618大促比往年来得要更早一些。纵览各电商平台的电视产品,能发现Mini LED电视的出镜率很高,成了各大品牌的主推产品。 对于什么样的Mini LED更值得买,各品牌都有自己的说辞。因为缺乏科学系统的选购标准,消费者容易在各方说…

【Qt】【模型-视图架构】代理模型示例

文章目录 1. 基本排序/过滤模型Basic Sort/Filter Model Example2. 自定义排序/过滤模型Custom Sort/Filter Model ExampleFilterLineEdit类定义及实现MySortFilterProxyModel类定义及实现 1. 基本排序/过滤模型Basic Sort/Filter Model Example 官方提供的基本排序/过滤模型示…

docker镜像体积优化攻略参考—— 筑梦之路

简单介绍 镜像的本质是镜像层和运行配置文件组成的压缩包,构建镜像是通过运行 Dockerfile 中的 RUN 、COPY 和 ADD 等指令生成镜像层和配置文件的过程。 和镜像体积大小有关的关键点: RUN、COPY 和 ADD 指令会在已有镜像层的基础上创建一个新的镜像层&…

【数据结构】详解二叉树

文章目录 1.树的结构及概念1.1树的概念1.2树的相关结构概念1.3树的表示1.4树在实际中的应用 2.二叉树的结构及概念2.1二叉树的概念2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3 二叉树的性质2.4二叉树的存储结构2.4.1顺序结构2.4.2链表结构 1.树的结构及概念 1.1树的概念…

基于SSM的车辆租赁管理系统(含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的车辆租赁管理系统1拥有两种角色 管理员:用户管理、用户租车、用户换车和车辆入库、添加汽车、添加客户、生成出租单、客户选车、出租单管理、查询出租单、角色权限管…

代码随想录算法训练营第三十四 |● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

今天的解析写在了代码注释中 1005.K次取反后最大化的数组和 讲解链接:https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.html class Solution { public:static bool cmp(i…

登录校验及全局异常处理器

登录校验 会话技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束.在一次会话中可以包含多次请求和响应会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话请求间共享数据会话跟踪方案 客户端…

关于MD5

首先还是介绍一下关于md5的基本信息: MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于产生128位(16字节)的哈希值,通常以32个十六进制数字表示。MD5广泛用于计算文件或文本数据的校…

分享一个 ASP.NET Web Api 上传和读取 Excel的方案

前言 许多业务场景下需要处理和分析大量的数据,而 Excel 是业务人员常用的数据表格工具,因此,将 Excel 表格中内容上传并读取到网站,是一个很常见的功能,目前有许多成熟的开源或者商业的第三方库,比如 NPO…

香港电讯荣获经济通「金融科技大奖」专业认可

香港电讯非常荣幸在《经济通》举办的「2023金融科技大奖」中脱颖而出,获「杰出跨境数码方案」、「杰出网络安全方案(商用)」和「杰出ESG解决方案」三个重要奖项。 香港电讯拥有丰富的经验及庞大的专业技术团队,一直致力为客户提供…

Spring Security3.0版本

前言: 核心: A >> ? >> B ?代表判断层,由Security实现 这是之前的版本浓缩,现在3.0版本添加了更匹配的内容描写,匹配了mvc模式 非mvc模式 核心:client&#x…

IService 接口中定义的常用方法

文心一言生成 以下是一些 IService 接口中定义的常用方法(以你提供的 UserSQL 类为例,该类继承自 ServiceImpl,因此也会拥有这些方法): 插入(新增) boolean save(T entity): 插入一条记录&…

scp:Linux系统本地与远程文件传输命令

scp 是Linux系统中用于在本地主机和远程主机之间进行文件传输的命令。 详细说明: scp 命令用于安全地将文件从一个主机传输到另一个主机,所有传输数据都是加密的。语法: scp [参数] [源文件路径] [目标主机:目标路径] 参数说明&#xff1a…

React 组件通信

1.从父组件向子组件传递参数: 父组件可以通过props将数据传递给子组件。子组件通过接收props来获取这些数据。 // 父组件 const ParentComponent () > {const data Hello, Child!;return <ChildComponent childData{data} />; }; ​ // 子组件 const ChildCompone…

2024-05-31 blue-VH-driver-问题分析-有状态的服务-状态的处理

摘要: VH的driver对上层提供的接口&#xff0c;是会保持状态。这个状态&#xff0c;可以分为&#xff0c;查询的数据的状态&#xff0c;主要是为了提供翻页查询的功能。另一种状态&#xff0c;就是订阅。 有状态的服务: 状态是什么? 其实从调用方的角度更好的理解&#xff0c…

【仿真设计】基于STM32的畜牧动物定位及行为检测设计的Proteus仿真

基于STM32的畜牧动物定位及行为检测设计的Proteus仿真 所需器件&#xff1a; Proteus版本&#xff1a;8.15 整体功能&#xff1a; STM32为主控芯片。温度采集并显示到OLED屏幕上进行监测&#xff08;DS18B20传感器&#xff09;。 判定条件&#xff1a;默认为上限为40度&…

数据结构:堆的保姆级教学指南

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.堆的概念 堆是一种特殊的树结构&#xff0c;通常用…

x264 参考帧管理原理:i_poc_type 变量

x264 参考帧管理 x264 是一个开源的 H.264 视频编码软件,它提供了许多高级特性,包括对参考帧的高效管理。参考帧管理是视频编码中的一个重要部分,它涉及到如何存储、更新和使用已经编码的帧以提高编码效率。 x264 参考帧管理的一些关键点总结如下: 参考帧的初始化和重排序:…

【爱空间_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

C#【进阶】排序进阶

排序进阶 文章目录 插入排序希尔排序归并排序快速排序堆排序 插入排序 #region 知识点一 插入排序的基本原理 // 8 7 1 5 4 2 6 3 9 // 两个区域 // 排序区 // 未排序区 // 用一个索引值做分水岭// 未排序区元素 // 与排序区元素比较 // 插入到合适位置 // 直到未排序区清空 #e…