2026-05-23
C#
0

目录

🔧 开篇
📌 上节回顾
💡 核心知识讲解
数组是什么?先打个比方
一维数组:最常用,先搞懂它
多维数组:数据有"行列"关系时用它
交错数组:每行长度不一样时用它
💻 VS2026 操作步骤
📋 完整代码示例
🏭 工业实战小案例
⚠️ 避坑提醒
这几个坑,我替你踩过了
📝 本节总结

🔧 开篇

注塑车间,32台注塑机,每台机器有一个模温传感器。

领导说:"把所有机器的当前温度显示在监控界面上。"

你打开 VS,写下第一行:

csharp
double temp1 = 0; double temp2 = 0; double temp3 = 0;

写到第5个,你停下来了——这要写到 temp32

这不是编程,这是体力活。

数组,就是今天要帮你解决这个问题的工具。


📌 上节回顾

「上一节我们学了跳转语句,掌握了用 breakcontinuereturngoto 控制程序执行流程的方法。今天在这个基础上,我们进一步学习如何用数组批量存储和处理工业数据。」


💡 核心知识讲解

数组是什么?先打个比方

你去仓库领零件,仓管给了你一排有编号格子的零件盒。

格子1放螺丝,格子2放螺母,格子3放垫片……

这排格子,就是数组(Array)。

每个格子有固定位置(下标,从0开始),你随时可以按编号取出或放入数据。


一维数组:最常用,先搞懂它

一维数组,就是"一排格子"。

声明方式:

csharp
double[] moldTemp = new double[32]; // 声明32个格子,存32台注塑机的模温

赋值和读取:

csharp
moldTemp[0] = 185.5; // 第1台机器温度(下标从0开始) moldTemp[1] = 192.3; // 第2台机器温度 double t = moldTemp[0]; // 读取第1台机器温度

「记住:下标从0开始,不是从1。这是初学者最容易踩的第一个坑。」

也可以声明时直接初始化:

csharp
// C# 14 新写法,更简洁 double[] alarmThreshold = [180.0, 190.0, 200.0, 210.0];

配合 for 循环,32台机器的温度一次性处理:

csharp
for (int i = 0; i < moldTemp.Length; i++) { Console.WriteLine($"第{i + 1}台注塑机温度:{moldTemp[i]}°C"); }

多维数组:数据有"行列"关系时用它

多维数组,就是"多排格子",像一张表格。

最常用的是二维数组(二维 = 行 × 列)。

工业场景举例: 一条生产线有8个工位,每个工位记录3个数据(温度、压力、转速)。

维度含义示例
第一维(行)工位编号0~7,共8个工位
第二维(列)数据类型0=温度,1=压力,2=转速

声明方式:

csharp
double[,] stationData = new double[8, 3]; // 8行3列

赋值和读取:

csharp
stationData[0, 0] = 75.5; // 第1工位,温度 stationData[0, 1] = 3.2; // 第1工位,压力(MPa) stationData[0, 2] = 1450; // 第1工位,转速(rpm)

「多维数组适合数据本身有"行列结构"的场景,比如工位参数表、班次报表。」


交错数组:每行长度不一样时用它

交错数组(Jagged Array)是"数组的数组"。

工业场景举例: 3条产线,每条产线的设备数量不同(A线5台、B线3台、C线8台)。

用二维数组会浪费空间(要按最大数量8来分配),用交错数组刚刚好:

csharp
double[][] lineTemp = new double[3][]; // 3条产线 lineTemp[0] = new double[5]; // A线5台设备 lineTemp[1] = new double[3]; // B线3台设备 lineTemp[2] = new double[8]; // C线8台设备

三种数组对比,一张表看清楚:

类型结构适用场景
一维数组一排格子单类数据批量存储
多维数组固定行列表格结构整齐的矩阵数据
交错数组每行长度可不同各组数量不一致的数据

💻 VS2026 操作步骤

Step 1 新建控制台项目

打开 VS2026,选择 文件 > 新建 > 项目,搜索"控制台应用",选择 .NET 10,项目名填 ArrayDemo,点击创建。

Step 2 输入代码并启用 Copilot 补全

Program.cs 中,输入 double[] moldTemp,Copilot 会自动联想出数组初始化和循环遍历的完整代码块。

Tab 接受建议,再根据实际需求修改变量名和长度。

建议:Copilot 生成的变量名有时是通用的(如 array1),记得手动改成有工业语义的名字(如 moldTemplineSpeed)。

Step 3 运行与调试

F5 运行。如果出现"索引超出范围"报错(IndexOutOfRangeException),点击报错行,VS2026 会在行内直接显示当前下标值和数组长度,方便快速定位问题。

Step 4(Vibe Coding 提示词写法)

如果你想让 AI 直接帮你生成数组相关代码,可以这样写 Prompt:

"用 C# 14 声明一个长度为32的 double 数组,存储注塑机模温数据,用 for 循环遍历输出每台机器的温度,温度超过200度时打印报警信息。"

Copilot 会生成完整、可运行的代码,你只需要核对变量名是否符合项目规范。


📋 完整代码示例

这段代码实现了:用一维数组存储8台注塑机的模温数据,遍历输出温度,并对超温设备发出报警提示。

csharp
// ============================================================ // 示例:注塑机模温数组管理 // 运行环境:VS2026 + .NET 10 + C# 14 // ============================================================ using System; // 注塑机数量 const int MachineCount = 8; // 报警温度阈值(单位:℃) double alarmThreshold = 200.0; // 声明并初始化模温数组(C# 14 集合字面量写法) double[] moldTemp = [185.5, 192.3, 178.0, 205.6, 198.4, 201.1, 187.7, 193.0]; Console.WriteLine("========== 注塑机模温监控 =========="); // 遍历所有机器温度 for (int i = 0; i < moldTemp.Length; i++) { // 机器编号从1开始,更符合现场习惯 int machineNo = i + 1; double currentTemp = moldTemp[i]; // 判断是否超温 if (currentTemp >= alarmThreshold) { // 超温报警提示 Console.WriteLine($"⚠️ [报警] 第{machineNo:D2}号机 | 模温:{currentTemp:F1}°C | 已超过阈值 {alarmThreshold}°C!"); } else { // 正常状态输出 Console.WriteLine($"✅ [正常] 第{machineNo:D2}号机 | 模温:{currentTemp:F1}°C"); } } Console.WriteLine("===================================="); // 统计超温机器数量 int alarmCount = 0; foreach (double temp in moldTemp) { if (temp >= alarmThreshold) alarmCount++; } Console.WriteLine($"当前共有 {alarmCount} 台机器超温,请立即检查!");

image.png

运行后,你会在控制台看到每台注塑机的温度状态,超温的机器会单独标出报警信息。第4台(205.6°C)和第6台(201.1°C)会触发报警,最后一行汇总显示"共2台机器超温"。这套逻辑,直接可以移植到你的上位机项目里。


🏭 工业实战小案例

场景任务: 某冲压车间有3条产线,各产线设备数分别为4台、6台、5台,需要记录每台设备今日的产量,并统计各产线总产量。

思路拆解:

  • 设备数量各不相同 → 用交错数组,避免空间浪费
  • 外层循环遍历产线,内层循环遍历每台设备
  • 累加每条产线的设备产量,得到产线总产量
  • 输出每条产线的汇总结果
csharp
// ============================================================ // 冲压车间产线产量统计(交错数组示例) // ============================================================ using System; // 产线名称 string[] lineName = ["A线", "B线", "C线"]; // 交错数组:各产线设备今日产量(件) int[][] productionCount = new int[3][]; productionCount[0] = [1200, 980, 1100, 1050]; // A线4台设备 productionCount[1] = [870, 920, 1010, 880, 950, 1000]; // B线6台设备 productionCount[2] = [1300, 1280, 1250, 1310, 1290]; // C线5台设备 Console.WriteLine("========== 冲压车间今日产量汇总 =========="); // 遍历每条产线 for (int line = 0; line < productionCount.Length; line++) { int lineTotal = 0; // 累加本产线所有设备产量 foreach (int count in productionCount[line]) { lineTotal += count; } Console.WriteLine($"{lineName[line]}:共 {productionCount[line].Length} 台设备,今日总产量 {lineTotal} 件"); }

image.png

运行后,控制台输出每条产线的设备数量和今日总产量,数据清晰,一目了然——这就是交错数组在实际生产统计中的典型用法。


⚠️ 避坑提醒

这几个坑,我替你踩过了

坑1:下标从0开始,别按习惯从1数

❌ 错误做法:moldTemp[32](数组长度32,最大下标是31)

✅ 正确做法:moldTemp[31]

📌 原因:C# 数组下标从0开始,访问 [32] 会直接抛出 IndexOutOfRangeException,程序崩溃。

坑2:多维数组和交错数组声明方式别搞混

❌ 错误做法:double[][] matrix = new double[3, 4];(语法错误,编译不过)

✅ 正确做法:多维用 double[,] matrix = new double[3, 4];,交错用 double[][] arr = new double[3][];

📌 原因:[,] 是多维数组,[][] 是交错数组,两者结构完全不同,不能混用。

坑3:数组长度声明后不能改

❌ 错误做法:moldTemp.Length = 64;(根本不能这样写)

✅ 正确做法:需要动态增减数量时,改用 List<double>(下一节就讲这个)

📌 原因:数组一旦创建,长度固定。强行修改只会让你在编译器面前碰壁。


📝 本节总结

「学完本节,你掌握了:」

一维数组的声明、初始化和遍历,能用它批量管理同类型的设备数据。多维数组的行列结构,适合存储有规律的矩阵型工业参数。交错数组的灵活特性,解决了各组数据量不一致的存储难题。你还学会了用 C# 14 的集合字面量写法让代码更简洁,以及三种最高频的初学者踩坑点。

数组是集合类的基础,掌握了它,下一节的 List<T> 学起来会顺很多。


📖 本文是《C# 工业数字化应用开发专家》系列第 018 节

上一节:【跳转语句:break、continue、return、goto】

下一节:【List<T> 泛型集合入门】

💬 你在工作中遇到过类似的需求吗?

是记录多台设备的温度、压力,还是统计各产线的产量?欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。

🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这420节,从工厂小白到工业软件开发专家,我们一起走。


#C#编程 #工业数字化 #上位机开发 #工厂工程师 #编程入门

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!