编辑
2026-05-29
C#
0

目录

🔧 开篇
📌 上节回顾
💡 核心知识讲解
数组的问题出在哪?
List\<T\> 是什么?
和数组的核心区别
List\<T\> 的核心操作
泛型(Generic)是什么意思?
💻 VS2026 操作步骤
Vibe Coding Prompt 写法
📋 完整代码示例
🏭 工业实战小案例
⚠️ 避坑提醒
这几个坑,我替你踩过了
📝 本节总结

🔧 开篇

产线上新增了5台焊接机器人,领导要求把每台设备的实时温度都显示在监控界面上。

你打开 VS,写了一个 float[] temps = new float[5],心想完事了。

结果第二周又加了3台,你只能回去改代码,把 5 改成 8……

第三周又加了2台。

「这数组到底要写多大才够用?」

如果你有这个困惑,今天这篇文章正好帮你解决它。


📌 上节回顾

「上一节我们学了数组,掌握了一维、多维与交错数组的声明和使用方法。今天在这个基础上,我们进一步学习 List<T> 泛型集合——一种比数组更灵活、更适合工业动态数据的容器。」


💡 核心知识讲解

数组的问题出在哪?

数组(Array)有一个硬伤:长度一旦定好,就不能改变

你在程序启动时声明了 int[] alarmCodes = new int[10],最多只能存10条报警记录。第11条进来,直接越界崩溃。

在工厂环境里,设备数量、报警条数、生产记录——这些数据天生就是动态的,数组应付起来很吃力。

List<T>(泛型列表) 就是为了解决这个问题而生的。


List<T> 是什么?

List<T> 是 C# 提供的一种 动态数组(可以自动扩容的集合容器)。

这里的 T 是一个占位符,代表你要存什么类型的数据。

  • 存设备温度(小数):List<float>
  • 存报警代码(整数):List<int>
  • 存设备名称(文字):List<string>

「把 T 理解成一个模具,你告诉它用什么材料,它就帮你做出对应的容器。」


和数组的核心区别

对比项数组 Array列表 List<T>
长度是否固定✅ 固定,声明时确定❌ 动态,随时增删
添加元素❌ 不支持直接添加.Add() 一行搞定
适合场景数量确定的静态数据数量变化的动态数据
性能略高(内存连续)略低(但工业场景够用)

大多数工厂应用场景,List<T> 是首选,数组反而用得少。


List<T> 的核心操作

掌握以下6个操作,日常开发够用了:

① 创建列表

csharp
var alarmList = new List<int>(); // 空列表 var deviceNames = new List<string> { "焊接机1号", "焊接机2号" }; // 带初始值

② 添加元素 .Add()

csharp
alarmList.Add(1001); // 添加一条报警码 alarmList.Add(1002);

③ 删除元素 .Remove() / .RemoveAt()

csharp
alarmList.Remove(1001); // 按值删除 alarmList.RemoveAt(0); // 按位置删除(第1个)

④ 查找元素 .Contains() / .Find()

csharp
bool exists = alarmList.Contains(1002); // 是否存在某个值

⑤ 获取数量 .Count

csharp
int total = alarmList.Count; // 当前有多少条记录

⑥ 遍历列表

csharp
foreach (var code in alarmList) { Console.WriteLine($"报警码:{code}"); }

「记住这6个操作,List<T> 的80%使用场景都覆盖了。」


泛型(Generic)是什么意思?

第一次看到 <T> 可能会懵。

泛型 的意思是:这个容器的"规格"由你来定,而不是写死的。

类比工厂里的周转箱:同一款箱子,装螺丝就是"螺丝箱",装轴承就是"轴承箱",箱子本身的结构没变,只是装的东西不同。

List<T> 就是这个"通用箱子",T 就是你要装的"货物类型"。


💻 VS2026 操作步骤

Step 1:新建控制台项目

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

Step 2:编写 List<T> 代码

打开 Program.cs,清空默认内容,按照下方代码示例输入。

输入 var alarmList = new List 时,VS2026 的 IntelliSense(智能代码补全)会自动弹出 List<T> 的类型提示,按 Tab 键快速补全。

Step 3:运行并查看输出

F5 启动调试,或点击顶部工具栏的 ▶ 按钮。

输出结果会显示在底部的「终端」窗口中。

VS2026 Copilot 辅助:如果运行报错,Copilot 会在错误行旁边显示 💡 图标,点击可获得"一键修复"建议,非常适合初学阶段快速排错。


Vibe Coding Prompt 写法

如果你想用 Vibe Coding 方式让 Copilot 帮你生成代码,可以在 VS2026 的 Copilot 对话框中输入以下 Prompt:

用 C# 14 和 .NET 10 写一个控制台程序, 使用 List<string> 存储5台注塑机的设备名称, 演示添加、删除、遍历操作, 变量名使用工业语义命名,每行关键代码加中文注释。

Copilot 会直接生成可运行的完整代码,你只需要检查逻辑是否符合需求即可。


📋 完整代码示例

这段代码演示了用 List<string> 管理注塑车间的设备列表,包含添加、删除、查找和遍历的完整操作流程。

csharp
// ============================================= // 示例:注塑车间设备列表管理 // 平台:VS2026 + .NET 10 + C# 14 // ============================================= using System; using System.Collections.Generic; // 【1】创建设备名称列表(初始包含3台设备) var deviceNameList = new List<string> { "注塑机1号", "注塑机2号", "注塑机3号" }; Console.WriteLine("===== 当前设备列表 ====="); // 【2】遍历并输出所有设备名称 foreach (var deviceName in deviceNameList) { Console.WriteLine($" 设备:{deviceName}"); } Console.WriteLine($"\n当前设备总数:{deviceNameList.Count} 台"); // 【3】新增设备(模拟产线扩产) deviceNameList.Add("注塑机4号"); deviceNameList.Add("注塑机5号"); Console.WriteLine("\n===== 新增2台设备后 ====="); Console.WriteLine($"当前设备总数:{deviceNameList.Count} 台"); // 【4】检查某台设备是否在列表中 string targetDevice = "注塑机3号"; bool isOnline = deviceNameList.Contains(targetDevice); Console.WriteLine($"\n{targetDevice} 是否在线:{isOnline}"); // 【5】移除一台设备(模拟设备下线) deviceNameList.Remove("注塑机2号"); Console.WriteLine("\n注塑机2号已下线,从列表移除。"); // 【6】按索引访问(获取第1台设备,索引从0开始) string firstDevice = deviceNameList[0]; Console.WriteLine($"当前列表第一台设备:{firstDevice}"); // 【7】输出最终设备列表 Console.WriteLine("\n===== 最终设备列表 ====="); for (int i = 0; i < deviceNameList.Count; i++) { Console.WriteLine($" [{i + 1}] {deviceNameList[i]}"); }

image.png

运行后,你会在终端窗口看到设备列表的动态变化过程:从3台到5台,再到移除1台后的4台,每次操作结果都清晰打印出来。整个过程不需要改一行长度定义,List 自动帮你管好了。


🏭 工业实战小案例

场景任务: 冲压车间需要实时记录每次冲压的压力值(单位:kN),并在超过阈值时自动标记为异常,最终输出本班次所有异常记录。

思路拆解:

  • List<float> 存储每次冲压的压力采样值。
  • 设定报警阈值 alarmThreshold = 850f(kN)。
  • 遍历压力列表,超过阈值的存入另一个 List<float>(异常列表)。
  • 输出异常列表和异常次数。
  • 无硬件时用随机数模拟压力数据。
csharp
// ============================================= // 实战案例:冲压车间压力异常记录 // 平台:VS2026 + .NET 10 + C# 14 // ============================================= using System; using System.Collections.Generic; // 【1】模拟本班次冲压压力采样数据(单位:kN) // 实际项目中这里替换为从 PLC 读取的真实数据 var pressureSamples = new List<float> { 780f, 810f, 860f, 795f, 900f, 830f, 875f, 760f, 920f, 805f }; // 【2】设定报警阈值 float alarmThreshold = 850f; // 【3】创建异常记录列表 var alarmPressureList = new List<float>(); // 【4】遍历采样数据,筛选超阈值记录 foreach (var pressure in pressureSamples) { if (pressure > alarmThreshold) { alarmPressureList.Add(pressure); } } Console.OutputEncoding=System.Text.Encoding.UTF8; // 支持输出特殊符号 // 【5】输出结果 Console.WriteLine($"本班次冲压总次数:{pressureSamples.Count} 次"); Console.WriteLine($"报警阈值:{alarmThreshold} kN"); Console.WriteLine($"异常冲压次数:{alarmPressureList.Count} 次\n"); if (alarmPressureList.Count > 0) { Console.WriteLine("===== 异常压力记录 ====="); foreach (var alarmValue in alarmPressureList) { Console.WriteLine($" ⚠️ 压力值:{alarmValue} kN(超出阈值)"); } } else { Console.WriteLine("本班次无异常冲压记录,生产正常。"); }

image.png

运行后终端会输出本班次共4次异常冲压记录(860、900、875、920 kN),清晰列出每次超阈值的压力值,为班组长的交接报告提供数据支撑。


⚠️ 避坑提醒

这几个坑,我替你踩过了

坑1:用数组的方式给 List 赋初值

❌ 错误做法:alarmList[0] = 1001;(List 为空时直接按索引赋值)

✅ 正确做法:alarmList.Add(1001);

📌 原因:空 List 没有任何元素,按索引访问会直接抛出 ArgumentOutOfRangeException,就像往空抽屉里抽第一格,抽屉根本不存在。


坑2:在 foreach 循环里删除元素

❌ 错误做法:在 foreach (var item in list) 内部调用 list.Remove(item)

✅ 正确做法:先用另一个列表收集要删的项,循环结束后再统一删除,或改用 list.RemoveAll(x => 条件) 一行搞定。

📌 原因:foreach 遍历时不允许修改集合,否则运行时会抛出 InvalidOperationException,这是新手最容易踩的坑之一。


坑3:混淆 .Count 和数组的 .Length

❌ 错误做法:alarmList.Length(List 没有这个属性)

✅ 正确做法:alarmList.Count

📌 原因:数组用 .Length,List 用 .Count,两者不通用,写错了 VS 直接报红线,编译不过。


📝 本节总结

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

List<T> 是一种长度可动态变化的集合容器,用 <T> 指定存储类型,比数组更适合工厂中数量不固定的动态数据场景。你学会了用 .Add() 添加、.Remove() 删除、.Contains() 查找、.Count 统计,以及用 foreach 遍历整个列表。结合冲压压力案例,你也体验了如何用 List 筛选异常数据、输出报告。这些操作在后续的设备监控、报警管理、生产记录等模块里会反复用到,打好这个基础,后面的路会顺很多。

把今天的代码跑一遍,比看十遍更有用。


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

上一节:【数组:一维、多维与交错数组】

下一节:【Dictionary<K,V> 字典集合入门】

💬 你在工作中有没有遇到过"数据条数不固定、数组写死了不够用"的情况?

欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。

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


#工业数字化 #C#编程入门 #工厂工程师 #NET10 #工业软件开发

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:技术老小子

本文链接:

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