.NET Framework 4.7.2中如何用原生StringBuilder实现带分隔符追加?
仅用原生StringBuilder实现逗号分隔的错误消息追加(.NET Framework 4.7.2)
原生StringBuilder确实没有内置的“默认分隔符”设置,但完全可以通过它自带的Length属性和Append方法实现需求,不需要额外集合、String.Join或自定义类,核心逻辑就是追加新消息前先判断是否已有内容,有则先加分隔符:
// 初始化可跨方法传递的StringBuilder实例 var errorTracker = new StringBuilder(); // 场景1:在方法A中追加第一条错误 if (errorTracker.Length > 0) errorTracker.Append(", "); errorTracker.Append("Duplicated ID"); // 场景2:在方法B中追加第二条错误 if (errorTracker.Length > 0) errorTracker.Append(", "); errorTracker.Append("Invalid cost"); // 场景3:在方法C中追加第三条错误 if (errorTracker.Length > 0) errorTracker.Append(", "); errorTracker.Append("Unsupported Service for account"); // 最终输出无多余末尾逗号的结果 string finalErrors = errorTracker.ToString(); // 输出:Duplicated ID, Invalid cost, Unsupported Service for account
这种方式逻辑直白:只有当StringBuilder中已有内容时,才在新消息前追加分隔符,从根源上避免了末尾出现多余逗号的问题,完全依赖StringBuilder的原生方法实现,符合你跨方法传递实例、按需追加消息的场景。
如果觉得每次写判断有点繁琐,也可以基于原生StringBuilder写个轻量的扩展方法(本质还是用原生API,不算自定义类):
public static class StringBuilderExtensions { public static StringBuilder AppendWithSeparator(this StringBuilder sb, string message, string separator = ", ") { if (sb.Length > 0) sb.Append(separator); sb.Append(message); return sb; } }
使用时就简化成:
errorTracker.AppendWithSeparator("Duplicated ID"); errorTracker.AppendWithSeparator("Invalid cost");
这个扩展方法完全基于原生StringBuilder实现,没有引入额外依赖,也能满足你的需求。
内容的提问来源于stack exchange,提问作者SyndRain
相关产品推荐
相关产品推荐

