设备报警信息要显示在监控屏上,你写了这么一行:
"设备" + deviceId + "温度超限,当前值:" + temp + "℃,阈值:" + threshold + "℃"
加号写了一串,括号配了半天,运行一看,数字之间多了个空格,小数点后面跟了一堆零。领导说:"这显示的什么东西,能不能专业点?"
你盯着代码,不知道从哪改起。
这种情况,今天这篇文章能帮你彻底解决。
上一节我们学了运算符全解,掌握了算术运算、逻辑判断和位运算的使用方法。今天在这个基础上,我们进一步学习字符串操作——如何把设备数据、状态信息、报警内容,拼成一条条可读性强的文字输出。
字符串(string)就是一串文字,像一条"传送带标签",把各种信息贴在一起传出去。
在工业软件里,你每天都在跟字符串打交道:设备名称、报警描述、日志内容、报表表头……全是字符串。
C# 里的字符串用双引号括起来,例如:"3号注塑机温度超限" 就是一个字符串。
+ 号拼接(最直接,但有坑)最原始的方式是用 + 号把几段文字"焊"在一起:
csharpstring deviceName = "3号注塑机";
double temp = 285.6;
string msg = "设备:" + deviceName + ",当前温度:" + temp + "℃";
这种方式简单,但问题也明显:
「小项目凑合用,正式项目别这么干。」
string.Format() 格式化(老派但精准)string.Format() 是 C# 的"模板填空"方法,用 {0}、{1} 占位,再把变量填进去:
csharpstring result = string.Format("设备:{0},温度:{1:F1}℃,状态:{2}",
deviceName, temp, "超限");
注意 {1:F1} 这个写法——F1 表示保留1位小数,这就是格式控制符。
常用格式控制符如下:
| 格式符 | 含义 | 示例输出 |
|---|---|---|
F2 | 保留2位小数 | 285.60 |
D4 | 整数补零到4位 | 0032 |
P1 | 百分比保留1位 | 98.5% |
N0 | 千位分隔符 | 12,500 |
「记住 F、D、P 这三个,工业报表基本够用了。」
$"" (C# 推荐写法)这是 C# 6 之后的主流写法,也是 C# 14 + .NET 10 下的首选方式。
用 $ 符号开头,直接把变量名写进花括号里,比 string.Format() 更直观:
csharpstring log = $"[{DateTime.Now:HH:mm:ss}] 设备:{deviceName},温度:{temp:F1}℃,已触发报警";
格式控制符照样可以用,写在变量名后面加冒号即可:{temp:F1}。
这种写法的优势:
{temp > 280 ? "超限" : "正常"}| 方式 | 可读性 | 格式控制 | 推荐场景 |
|---|---|---|---|
+ 拼接 | 一般 | 弱 | 临时调试 |
string.Format() | 中等 | 强 | 多参数模板 |
$"" 插值 | 最强 | 强 | 日常开发首选 |
在 .NET 10 + C# 14 下,编译器对插值字符串做了更深度的优化。
它会自动利用 Span<T> 和栈内存,减少堆内存分配。
对工厂软件来说,这意味着高频刷新的设备状态字符串,不会因为频繁拼接而拖慢程序。
「你写的是 $"" 插值,编译器帮你变成了高性能代码——不需要你多做任何事。」
Step 1 新建控制台项目
打开 VS2026,选择 文件 > 新建 > 项目,搜索"控制台应用",选择 .NET 10 框架,项目名填 StringDemo,点击创建。
VS2026 Copilot 辅助:创建完成后,Copilot 会在右侧面板提示"是否需要添加常用工业日志模板?",可以点击"插入示例"快速获得代码框架。
Step 2 在 Program.cs 中编写代码
直接在 Program.cs 里写代码,.NET 10 顶级语句(Top-level statements)不需要写 class 和 Main 方法,直接开始写逻辑即可。
VS2026 Copilot 辅助:输入
// 生成设备报警字符串注释后按 Tab,Copilot 会自动补全一段包含插值表达式的示例代码,可直接参考修改。
Step 3 运行并查看输出
按 Ctrl + F5 运行(不调试模式),控制台窗口会显示格式化后的字符串输出。
VS2026 Copilot 辅助:如果输出格式不对,选中代码后右键选择 Ask Copilot,输入"帮我把这段输出改成只保留2位小数",Copilot 会直接给出修改建议。
Step 4(Vibe Coding Prompt 写法)
如果你想用 Vibe Coding 方式快速生成本节代码,可以在 Copilot 对话框输入:
"用 C# 14 插值表达式,模拟一个注塑机设备状态报告字符串,包含设备编号、当前温度(保留1位小数)、生产计数、当前时间,格式适合在 WinForms 标签控件上显示。"
这段代码模拟了一个注塑机设备状态报告的字符串生成过程,覆盖了拼接、string.Format()、插值三种方式的对比演示。
csharp// ============================================================
// 示例:注塑机设备状态字符串生成
// 运行环境:VS2026 + .NET 10 + C# 14
// ============================================================
Console.OutputEncoding=System.Text.Encoding.UTF8; // 支持控制台输出 Unicode 字符(如表情符号)
// 模拟设备数据
string deviceId = "IMM-03"; // 设备编号(注塑机03号)
string deviceName = "3号注塑机";
double currentTemp = 285.6; // 当前温度(℃)
double alarmThreshold = 280.0; // 报警阈值(℃)
int productionCount = 12538; // 当前班次生产计数
double qualifiedRate = 0.9852; // 合格率
bool isAlarming = currentTemp > alarmThreshold;
// -------------------------------------------------------
// 方式一:+ 号拼接(演示用,实际项目不推荐)
// -------------------------------------------------------
string msg1 = "设备:" + deviceName + ",温度:" + currentTemp + "℃";
Console.WriteLine("【+拼接】" + msg1);
// -------------------------------------------------------
// 方式二:string.Format() 格式化输出
// -------------------------------------------------------
string msg2 = string.Format(
"设备:{0}({1}),温度:{2:F1}℃,阈值:{3:F1}℃,状态:{4}",
deviceName,
deviceId,
currentTemp,
alarmThreshold,
isAlarming ? "⚠ 超限报警" : "✓ 正常运行"
);
Console.WriteLine("【Format】" + msg2);
// -------------------------------------------------------
// 方式三:$ 插值表达式(推荐,C# 14 编译器自动优化)
// -------------------------------------------------------
string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string statusReport = $"""
╔══════════════════════════════╗
║ 设备状态报告(实时) ║
╠══════════════════════════════╣
║ 设备编号:{deviceId,-18}║
║ 设备名称:{deviceName,-18}║
║ 当前温度:{currentTemp:F1} ℃{(isAlarming ? " ⚠ 超限" : " ✓ 正常"),-10}║
║ 报警阈值:{alarmThreshold:F1} ℃{"",-14}║
║ 生产计数:{productionCount:N0} 件{"",-12}║
║ 合格率 :{qualifiedRate:P1}{"",-16}║
║ 更新时间:{timestamp,-18}║
╚══════════════════════════════╝
""";
Console.WriteLine(statusReport);
// -------------------------------------------------------
// 插值表达式中嵌入条件判断
// -------------------------------------------------------
string alarmLog = $"[{DateTime.Now:HH:mm:ss}] [{deviceId}] " +
$"温度 {currentTemp:F1}℃ " +
$"{(isAlarming ? $"超过阈值 {alarmThreshold:F1}℃,请立即检查!" : "在正常范围内")}";
Console.WriteLine("\n【报警日志】");
Console.WriteLine(alarmLog);

运行后,控制台会依次输出三种方式的结果。重点看第三段:设备状态报告以表格形式整齐显示,温度超限时自动追加"⚠ 超限"标记,报警日志带时间戳和条件判断,直接可以接入你的日志模块。
场景任务: 汽车焊接线上,每完成一个车身焊接循环,需要向 MES 系统(制造执行系统,工厂里管生产过程的软件)发送一条格式固定的状态字符串,格式为:WELD|站点编号|完成时间|焊点数|合格状态。
思路拆解:
DateTime.Now 格式化为指定格式csharp// 汽车焊接线 MES 上报字符串生成
string weldStationId = "WS-A03"; // 焊接站点编号
int weldSpotCount = 86; // 本次焊点数
int qualifiedSpots = 85; // 合格焊点数
bool weldQualified = qualifiedSpots == weldSpotCount;
// 按 MES 协议格式生成上报字符串
string mesReportStr = $"WELD|{weldStationId}|{DateTime.Now:yyyyMMddHHmmss}|{weldSpotCount}|{(weldQualified ? "OK" : "NG")}";
Console.WriteLine("MES上报内容:");
Console.WriteLine(mesReportStr);
// 输出示例:WELD|WS-A03|20260413114445|86|NG

运行后输出一行符合 MES 协议格式的字符串,NG 表示本次焊接有焊点不合格,MES 系统收到后会触发返修流程。
坑一:数字直接拼字符串,格式失控
❌ 错误做法:"温度:" + 285.600000001 + "℃"
✅ 正确做法:$"温度:{temp:F1}℃"
📌 原因:浮点数(小数)直接转字符串会带出一堆尾数,格式符 F1 才能精确控制小数位数。
坑二:$"" 里面的花括号用错
❌ 错误做法:$"设备编号:{deviceId(忘记写右花括号)或 $"比例:{rate * 100}%" 但忘了用 P 格式符
✅ 正确做法:$"比例:{rate:P1}" 或 $"比例:{rate * 100:F1}%"
📌 原因:{表达式:格式符} 这个结构,冒号后面跟格式符,不要和普通冒号混淆。
坑三:高频刷新场景里用 + 拼接,内存越用越多
❌ 错误做法:在定时器每100ms触发一次的回调里用 + 号拼接长字符串
✅ 正确做法:改用 $"" 插值或 StringBuilder(字符串构建器)
📌 原因:+ 拼接每次都会生成新的字符串对象,高频场景下垃圾回收压力大,程序会越跑越卡。
「学完本节,你掌握了:」
用 + 拼接字符串的基本方式和适用边界,用 string.Format() 精确控制数字格式的方法,以及 C# 推荐的 $"" 插值表达式写法——变量直接嵌入字符串,格式符紧跟冒号后面,条件判断也能直接写在花括号里。在 .NET 10 + C# 14 下,插值表达式由编译器自动优化,写得舒服,跑得也快。
字符串操作看起来简单,但工厂里的报表、日志、MES上报,全靠这几招撑起来。掌握了这些,你写出来的信息就不再是"能看",而是"专业"。
📖 本文是《C# 工业数字化应用开发专家》系列第 013 节
上一节:【运算符全解:算术、逻辑、位运算】
下一节:【条件语句:if、else if、switch】(明天更新)
💬 你在工作中有没有遇到过这种需求:要把设备数据按固定格式发给上位机或 MES 系统?
欢迎在评论区说说你们厂的格式要求,也许下一篇实战案例就来自你的留言。
🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这 420 节,从工厂小白到工业软件开发专家,我们一起走。
#工业数字化 #C#编程入门 #工厂软件开发 #制造业IT #编程学习
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!