你有没有遇到过这种情况:
PLC 采集回来的温度是 87.6,你存进变量里之后,界面上显示的却是 87。
你反复检查通信代码,查了一个小时,最后发现——变量类型用错了,就这么简单。
这种低级错误,在工厂项目里出现的频率,远比你想象的高。
今天这节课,我们就把 C# 里最基础、也最容易踩坑的四个数据类型彻底搞清楚。
「上一节我们学了解决方案、项目、文件的层级关系,掌握了在 VS2026 中组织代码结构的方法。今天在这个基础上,我们进一步学习变量与数据类型——这是你写出第一行"有意义的代码"的关键一步。」
你可以把变量(程序里用来存数据的容器)理解成仓库里的料箱。
每个料箱有个标签(变量名),里面装着东西(数据)。
不同的料箱规格不一样,有的装整数,有的装小数,有的装文字。
「规格选错了,东西装不进去,或者装进去就变形了。」
这个"规格",就是数据类型。
先看一张对照表,建立整体感知:
| 数据类型 | 存什么数据 | 工厂典型用途 |
|---|---|---|
int | 整数 | 产品计数、设备编号、工单号 |
double | 小数(高精度) | 温度、压力、电压、重量 |
string | 文字/字符串 | 工单编号、操作员姓名、报警描述 |
bool | 真/假(开/关) | 设备运行状态、报警触发、门禁状态 |
四种类型,基本覆盖了工厂数据采集里 80% 以上的场景。
int 是最常用的整数类型,范围是 -21亿 到 +21亿,日常工厂用途完全够用。
csharpint productionCount = 1500; // 今日生产数量
int deviceId = 42; // 设备编号
int alarmCode = 3; // 报警代码
「记住:int 存的是整数,你给它赋值 87.6,它只会保留 87,小数点后面直接丢掉,不是四舍五入。」
这个特性,是温度显示出错的最常见原因。
工厂里的传感器数据,大多数是带小数的。
温度 87.6℃、电压 220.3V、重量 12.45kg——这些都该用 double。
csharpdouble deviceTemp = 87.6; // 设备温度(℃)
double supplyVoltage = 220.3; // 供电电压(V)
double productWeight = 12.45; // 产品重量(kg)
double 精度可以达到小数点后 15~16 位,传感器数据完全够用。
⚠️ 如果你做的是财务结算系统(比如计件工资),精度要求更高,应该用
decimal而不是double。但工业采集场景,double就够了。
工单号、操作员工号、设备名称、报警描述——这些都是文字,用 string 存。
csharpstring workOrderId = "WO-20260410-001"; // 工单编号
string operatorName = "张师傅"; // 操作员姓名
string alarmMessage = "1号炉温度超限"; // 报警描述文字
「string 里的内容必须用英文双引号 "" 括起来,这是语法规定,少一个引号程序就报错。」
两个字符串拼接,用 + 号就行:
csharpstring logEntry = operatorName + " 处理了报警:" + alarmMessage;
// 结果:张师傅 处理了报警:1号炉温度超限
bool(布尔类型)只有 true(真)和 false(假)两个值。
听起来简单,但它是所有判断逻辑的基础。
csharpbool isDeviceRunning = true; // 设备是否运行中
bool isAlarmTriggered = false; // 报警是否触发
bool isDoorLocked = true; // 安全门是否锁闭
你后面写的所有 if 判断,底层都是在判断一个 bool 是 true 还是 false。
「设备状态、报警开关、权限判断——凡是只有"是/否"两种状态的数据,首选 bool,别用 int 的 0 和 1 代替,那样代码可读性很差。」
C# 14 支持用 var 让编译器自动推断类型(类型推断:你不用写类型,编译器自己判断):
csharpvar productionCount = 1500; // 编译器自动识别为 int
var deviceTemp = 87.6; // 编译器自动识别为 double
var workOrderId = "WO-001"; // 编译器自动识别为 string
var isAlarmTriggered = false; // 编译器自动识别为 bool
var 不是"不写类型",而是"让编译器帮你写"。类型在编译时就确定了,运行时不会变。
入门阶段建议先写明确类型,等熟悉了再用
var,这样更容易理解代码逻辑,这玩意我刚开始抵触的不行,这个看上去就是javascript的var,现在用着用着越来越习惯了。
Step 1:新建控制台项目
打开 VS2026,选择 文件 > 新建 > 项目,搜索"控制台应用",选择 C# 控制台应用(.NET 10),项目名填 DataTypeDemo,点击创建。

VS2026 Copilot 辅助:创建完成后,Copilot 会在右侧面板提示"检测到新项目,是否生成入门代码模板",点击"生成基础结构"可自动生成
Program.cs框架。
Step 2:打开 Program.cs,清空默认内容
默认会有一行 Console.WriteLine("Hello, World!");,全选删除,准备手动输入代码。
VS2026 Copilot 辅助:在空白处输入注释
// 声明工厂数据变量,Copilot 会自动补全一组示例变量声明,按Tab键接受,再根据实际需求修改变量名和初始值。
Step 3:输入本节示例代码,运行查看输出
将下方完整代码粘贴进 Program.cs,按 F5 或点击顶部"运行"按钮启动调试。
输出结果会显示在底部"终端"窗口中。
VS2026 Copilot 辅助:如果你对某个变量的类型拿不准,把鼠标悬停在变量名上,Copilot 会弹出提示框,说明当前类型、取值范围和推荐替代类型。
🤖 Vibe Coding Prompt 示例
如果你想用自然语言让 Copilot 帮你生成代码,可以这样写 Prompt:
帮我声明一组用于注塑机监控的变量, 包含:模具温度(小数)、当前模次计数(整数)、 工单编号(文字)、设备是否在运行(布尔), 使用有工业语义的英文变量名,加上中文注释。

Copilot 会直接生成一段符合工业命名规范的变量声明代码,你只需要检查一遍、按需调整即可。
这段代码实现了:声明四种基本数据类型的工厂变量,并将它们格式化输出到控制台,模拟一条设备状态日志的打印效果。
csharp// 整数类型:今日生产计数、设备编号
int productionCount = 1500;
int deviceId = 7;
// 浮点类型:设备温度、供电电压
double deviceTemp = 87.6;
double supplyVoltage = 220.3;
// 字符串类型:工单编号、操作员姓名
string workOrderId = "WO-20260410-007";
string operatorName = "李工";
// 布尔类型:设备运行状态、报警触发状态
bool isDeviceRunning = true;
bool isAlarmTriggered = false;
// 报警阈值(温度超过此值触发报警)
double alarmThreshold = 90.0;
// 设置控制台输出编码为 UTF-8,以支持中文字符显示
Console.OutputEncoding=System.Text.Encoding.UTF8;
// ---- 输出设备状态日志 ----
Console.WriteLine("========== 设备状态日志 ==========");
Console.WriteLine($"工单编号:{workOrderId}");
Console.WriteLine($"操作员 :{operatorName}");
Console.WriteLine($"设备编号:{deviceId} 号机");
Console.WriteLine($"运行状态:{(isDeviceRunning ? "运行中" : "已停机")}");
Console.WriteLine($"当前温度:{deviceTemp} ℃ (报警阈值:{alarmThreshold} ℃)");
Console.WriteLine($"供电电压:{supplyVoltage} V");
Console.WriteLine($"今日产量:{productionCount} 件");
// ---- 判断是否触发温度报警 ----
isAlarmTriggered = deviceTemp >= alarmThreshold;
if (isAlarmTriggered)
{
Console.WriteLine("⚠️ 警告:温度超限,请立即检查设备!");
}
else
{
Console.WriteLine("✅ 温度正常,设备运行良好。");
}
// ---- 字符串拼接示例:生成一条日志记录 ----
string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] " +
$"设备{deviceId}号 | 操作员:{operatorName} | " +
$"温度:{deviceTemp}℃ | 产量:{productionCount}件";
Console.WriteLine("\n--- 完整日志记录 ---");
Console.WriteLine(logEntry);

运行后,你会在终端看到一份格式整齐的设备状态日志,温度低于 90℃ 时显示绿色"正常"提示,超过阈值则显示报警警告。日志最后一行还会打印出带时间戳的完整记录,这个格式和真实工厂 MES 系统的日志格式非常接近。
场景任务: 注塑车间 3 号机今日完成了 2300 模,模具温度当前读数为 92.4℃,报警上限设定为 90℃,需要判断是否触发超温报警,并打印一条带操作员信息的报警记录。
思路拆解:
① 用 int 存模次计数,用 double 存温度和阈值。
② 用 bool 存报警状态,通过比较运算赋值。
③ 用 string 拼接报警记录文字。
④ 用 if 判断 bool 值,决定是否打印报警。
csharp// 超温报警判断示例
int moldCycleCount = 2300; // 今日模次
double moldTemp = 92.4; // 当前模具温度(℃)
double alarmThreshold = 90.0; // 超温报警阈值(℃)
string machineId = "注塑机3号";
string operatorName = "王师傅";
bool isTempAlarm = false;
// 判断是否超温
isTempAlarm = moldTemp > alarmThreshold;
// 生成报警记录
if (isTempAlarm)
{
string alarmRecord = $"[超温报警] {machineId} | " +
$"当前温度:{moldTemp}℃ 超过阈值 {alarmThreshold}℃ | " +
$"操作员:{operatorName} | 今日模次:{moldCycleCount}";
Console.WriteLine(alarmRecord);
}
else
{
Console.WriteLine($"{machineId} 温度正常,当前 {moldTemp}℃。");
}
运行后终端直接输出一条带机器编号、温度数值、操作员姓名的超温报警记录——这就是工厂报警系统里最核心的数据结构雏形。
坑一:用 int 存温度,小数悄悄丢了
❌ 错误做法:int deviceTemp = 87.6;
✅ 正确做法:double deviceTemp = 87.6;
📌 原因:int 直接截断小数部分,不报错但数据已经错了,查起来极难发现。
坑二:用数字 0/1 代替 bool,可读性极差
❌ 错误做法:int isRunning = 1; // 1代表运行,0代表停机
✅ 正确做法:bool isRunning = true;
📌 原因:三个月后你自己都不记得 1 是啥意思,用 bool 代码一眼就懂。
坑三:字符串忘加引号,或者用了中文引号
❌ 错误做法:string workOrderId = WO-001; 或 string name = "张师傅";(中文引号)
✅ 正确做法:string workOrderId = "WO-001";(英文双引号)
📌 原因:变量名不加引号编译器会把它当变量处理直接报错;中文引号是 VS 里最难肉眼发现的语法错误之一。
「学完本节,你掌握了:」
int 用来存整数型的工厂数据,比如产量和设备编号;double 负责处理所有带小数的传感器数值;string 装的是文字信息,从工单号到报警描述都靠它;bool 只有真假两个值,却是所有状态判断的基础。这四个类型,是你后续写任何工厂程序的数据地基。
地基打稳了,楼才能往上盖。下一节的常量和枚举,会让你的代码从"能跑"变成"好维护"。
📖 本文是《C# 工业数字化应用开发专家》系列第 009 节
上一节:【理解解决方案、项目、文件的层级关系】
下一节:【常量与枚举(const / enum)】
💬 你在工作中有没有遇到过数据类型选错导致的 Bug?
欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。
🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这 420 节,从工厂小白到工业软件开发专家,我们一起走。
#C#编程入门 #工业数字化 #工厂工程师 #dotNET开发 #编程学习
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!