您的位置:首页 >C# string.format使用方法详解
发布于2026-01-06 阅读(0)
扫一扫,手机访问

占位符写成 {0}、{1} 这种序号形式最稳妥,索引必须从 0 开始连续,不能跳号或重复。比如 String.Format("{0} {2}", "a", "b", "c") 会抛出 IndexOutOfRangeException —— 因为只传了 3 个参数,但 {2} 是合法的(索引 2 对应第三个参数),真正出错的是 {0} {2} {1} 这种看似合理但参数数不够的情况。
常见错误现象:Input string was not in a correct format,大概率是占位符数量和参数数量对不上,或者用了命名占位符却没用 FormattableString(C# 6+)配合插值字符串,而仍用传统 String.Format。
{name} 这类命名占位符——String.Format 不支持,得用 $"{name}"null,占位符默认输出空字符串,不会崩,但要注意后续逻辑是否依赖非空{0:C2} 表示货币格式保留两位小数优先用 $ 插值字符串,它本质是编译器转换为 string.Format 或更优的 string.Create(.NET Core 3.0+),可读性高且支持表达式(如 $"{user.Name?.ToUpper()}"),而 String.Format 只能传变量或字面量。
但有些场景绕不开 String.Format:
String.Format 更清晰String.Format(IFormatProvider, string, params object[]) 比插值更直接性能上,简单场景插值略快;但若频繁拼接且格式复杂,两者差异微乎其微,别过早优化。
日期用 {0:yyyy-MM-dd HH:mm:ss} 没问题,但注意 HH 是 24 小时制,hh 是 12 小时制;数字用 {0:N2} 会加千分位和两位小数,但若值为 null 或非数字类型(比如传了 DateTime 却用数字格式),运行时抛异常而不是静默失败。
{0:d} 是短日期(如 2024-05-20),{0:D} 是长日期(含星期,如 Monday, May 20, 2024),大小写敏感{0:000.00},不足位补零;{0:#.##} 不足位不补,但也不会显示多余零double.NaN,用 N 格式会输出 NaN 字符串,不是空——这点常被忽略,校验逻辑要覆盖String.Format 是线程安全的,但每次调用都会分配新字符串对象。高频场景(如循环内拼日志)可能触发 GC 压力。替代方案:
StringBuilder + AppendFormat 复用缓冲区,尤其当格式固定、参数变化时string.Create 配合 Span,避免中间字符串分配,但代码变复杂,仅热点路径值得投入String.Format 合并成一个大格式串——可读性和维护性下降更快var sb = new StringBuilder();
sb.AppendFormat("User {0} logged in at {1:O}", userId, DateTime.UtcNow);
return sb.ToString();格式化本身不难,难的是在动态性、可读性、性能之间找平衡点。多数业务代码用 $ 就够了;只有当你手里的格式串是运行时决定的,或者要精确控制文化信息时,才真正需要伸手去摸 String.Format。
上一篇:公历转农历生日怎么查?详细教程
下一篇:抖音网页版入口及电脑登录方法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9