分类: .NET

C# 进程调用实战:Process 异步读取输出 + 超时取消 + 进程树终止

在 C# 里调用 Python、Shell、Java 脚本看似简单,落地却总踩同一个坑:大输出死锁、脚本卡死没有超时、子进程变孤儿。本文从真实的 ScriptHelper 实现出发,讲清 BeginOutputReadLine 防死锁的原理、CancellationTokenSource 控制超时的写法、Kill(true) 终止进程树的必要性,以及中文输出乱码与退出码读取时机的处理细节。

C# 连接字符串集中管理实战:Interlocked 原子守卫 + volatile 双检锁 + 异步重试

连接字符串散落在 appsettings.json 与 App.config 之间?本文基于 SwitchData 项目的 DbConnectionManager,用 Interlocked.Exchange 实现无锁一次性初始化,volatile 双检锁保证回退加载的线程安全,ConcurrentDictionary 缓存解密后的连接串,解密收口在单一方法,并配套 WaitForReadyAsync 异步重试等待数据库就绪。完整代码 + 讲解,一套可以直接抄走的静态管理类设计。

C# 动态查询条件构建实战:组合模式 + 运算符注册表 + 参数化 SQL 防注入完整方案

多可选参数查询接口还在用字符串拼接 SQL?本文拆解一套组合模式动态查询条件构建器:FilterCondition 叶子节点 + FilterGroup 逻辑组把 WHERE 子句建模成对象树,17 种运算符全部注册到一张声明式注册表,递归遍历时参数编号贯穿全树递增,值走 DbParameter、列名走元数据白名单校验,从根上堵死注入路径,并逐一讲清 LIKE 通配符转义、NULL 三值逻辑、空条件跳过等容易踩的坑。

C# SSH 自动化实战:ShellStream 交互式命令执行 + Expect 提示符等待

SSH.NET 的 RunCommand 每次都会新开 exec 通道,命令之间不共享上下文。本文基于真实网元运维代码,拆解 ShellStream 交互式命令执行的完整方案:CreateShellStream 创建伪终端、Expect 模式循环读流并等待提示符、两条正则清洗退格序列与 ANSI 颜色码,以及登录 banner 排干、logout 收尾等实战细节,并给出异步化与超时细分的演进方向。

C# 枚举元数据缓存实战:泛型静态类 + .NET 8 FrozenDictionary 让反射只跑一次

枚举转中文描述是业务系统刚需,但每次 ToString 加反射读 DescriptionAttribute 会拖慢高频接口。本文基于 SwitchData 项目的 EnumExtensions 实现,拆解泛型静态类 EnumCache<T> 的独立静态字段缓存原理、.NET 8 FrozenDictionary 的读优化特性,以及 (MyEnum)999 未定义枚举值的防御式处理,让枚举反射只跑一次。

C# IP 区间建模实战:IPAddress 字节序比较 + IComparable/IComparer/IEquatable 三接口实现网段排序

IPAddress 没有实现 IComparable,直接字符串排序会掉进字典序陷阱:10.0.0.10 反而排在 10.0.0.9 前面。本文以局数据系统中的 IPInterval / PortInterval 为例,完整实现字节序比较、CIDR 掩码求广播地址,以及 IComparable / IComparer / IEquatable 三个泛型接口的职责分工与 GetHashCode 一致性,让区间对象无缝接入 Sort、Distinct 与 O(n) 重合检测。

Mapster 对象映射实战:AfterMapping、Map 表达式与 MapWith,从扁平数据到树形结构

对象之间的字段搬运是后端最高频也最枯燥的工作。本文基于真实的菜单权限系统源码,系统讲解 Mapster 的四个映射层级:零配置 Adapt 一行映射、Map 表达式处理 int/bool 双向转换、AfterMapping 钩子组装嵌套对象、MapWith 自定义函数实现扁平列表转三层树形结构,并给出映射后位运算二次加工的组合技与选型建议,帮助把转换逻辑放对地方。

C# Telnet ORDP 直连客户端实战:多设备并发 + 协议清洗 + 回退机制

在电信行业网络运维中,Telnet 协议直连网元是一个非常实用但容易被忽视的技术方案。本文从 SwitchData 项目出发,完整拆解一套生产级 ORDP 直连架构:SemaphoreSlim 并发限流保护网关单点、VT100+NUL+命令回显三重协议清洗、IAsyncDisposable 异步资源管理、Try-Catch 整体回退第三方平台。附带 TelnetClient.ClearPendingText、ExpectedCommandPromptCount 多阶段提示符等多个实战踩坑经验。

DataTable 扩展方法实战:从零构建 ADO.NET 数据后处理工具集(Trim/Schema/映射/落库零分配完整实现)

DataTable 用得多了就会发现,所有项目都在重复这些操作:去空行、Trim 字符串、列名/索引互查、Schema 克隆、DataRow 转 Dictionary、ToSortedTable、FirtRowToColumnName。本文基于 SwitchData 项目中真实在用的 DataTableExtensions(1700+ 行),把高频数据后处理操作整理成统一的扩展方法工具集,涵盖倒序遍历、Span 零分配清洗、CloneSchema/CopyData 投影、SplitColumn/MergeColumns/FillDownColumns 复杂业务转换等完整实现。