当前位置: 首页 > 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#应用程序至关重要。

相关文章:

  • C#面:.Net中会存在内存泄漏吗,请简单描述
  • python数据库操作
  • 校园导航系统C++
  • ReDos攻击浅析
  • 【揭秘】如何借助聚道云软件连接器,实现差旅管理新飞跃!
  • 神器!!Python热重载调试【送源码】
  • 【康耐视国产案例】智能AI相机机器视觉精准快速实现包裹标签的智能粘贴
  • 问题排查|记录一次基于mymuduo库开发的服务器错误排查(段错误--Segmentation fault (core dumped))
  • 虚拟现实环境下的远程教育和智能评估系统(一)
  • 头歌数据结构与算法课程设计中-硬币找零
  • vue项目中markdown显示为html
  • MatLab命令行常用命令记录
  • 华为昇腾310 ATC模型转换、CPP推理案例使用
  • finetuning大模型准备(基于Mac环境)
  • SpringBoot 基于jedis实现Codis高可用访问
  • 2017 前端面试准备 - 收藏集 - 掘金
  • css系列之关于字体的事
  • HTTP中GET与POST的区别 99%的错误认识
  • javascript 总结(常用工具类的封装)
  • JS变量作用域
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 排序算法之--选择排序
  • 小试R空间处理新库sf
  • 函数计算新功能-----支持C#函数
  • ​人工智能书单(数学基础篇)
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (06)Hive——正则表达式
  • (1)(1.13) SiK无线电高级配置(五)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Qt) 默认QtWidget应用包含什么?
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (七)Knockout 创建自定义绑定
  • (图)IntelliTrace Tools 跟踪云端程序
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Linq学习笔记
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .Net 6.0 Windows平台如何判断当前电脑是否联网
  • .net 无限分类
  • .NET企业级应用架构设计系列之开场白
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • /usr/bin/env: node: No such file or directory
  • @Autowired自动装配
  • @Not - Empty-Null-Blank
  • [1204 寻找子串位置] 解题报告
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [C++随笔录] 红黑树
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)