C#:字符串占位符与值数量不一致

C#字符串占位符与值数量不一致,运行时会抛出 `FormatException`(提示"输入字符串的格式不正确")或 `IndexOutOfRangeException`,这是由占位符索引和参数个数不匹配导致的。

常见错误

  1. 占位符多于参数:格式字符串有 `{0}`、`{1}` 但只传了 1 个参数,运行时找不到对应值。

  2. 占位符索引不连续或跳号:如 `{0} {2}` 传 3 个参数,`{2}` 本身合法,但若索引超过参数总数上限就会报错。

  3. 参数多于占位符:不会报错,但多余参数被忽略,容易造成"看似正常实则结果不符合预期"。

  4. 花括号未转义:格式字符串中直接写 `{` 或 `}`(如 JSON 片段 `"{name:\"{0}\"}"`),会被误解析为占位符边界,导致格式错误。

检查与修复方法

  1. 核对占位符索引:`{0}` 从 0 开始连续递增,不能跳号、重复或超过参数个数减 1。

  2. 核对参数数量:确保参数个数 ≥ 最大占位符索引 + 1。

  3. 转义花括号:需要原样输出 `{` 或 `}` 时,写成 `{{` 或 `}}`。

  4. 用字符串插值替代:C#6.0+ 推荐使用 `$"{name}"`,直接在字符串中写变量名,从根本上避免占位符序号和参数个数不匹配的问题。

> 插值字符串在表达式内部不需要转义花括号,但若要在结果中输出花括号本身,仍要写成 `{{` 和 `}}`。

排查定位建议

若项目较大,可先在调试器里逐个检查所有 `string.Format`、`Console.WriteLine` 等调用点,或利用异常堆栈定位到具体代码行。 如果格式化内容包含大量花括号(如 JSON),建议直接用 `System.Text.Json` 等序列化库,而不是手动拼接字符串。

相关推荐
小马不起床1 小时前
Django 后端实战指南_14:门店、省份、用户门店关系查询接口
数据库·django·sqlite
迅猛龙办公室1 小时前
Python函数实现反转一个只有3位数的整数
开发语言·前端·python
我星期八休息1 小时前
Redis 的原理和使用(2)
前端·数据库·redis·python·mysql·缓存·bootstrap
“AI国潮设计-小江”1 小时前
《【AIGC实战】Python+SDXL批量生成“英歌舞树莓香草布丁”IP,附保持角色一致性的代码逻辑》
开发语言·人工智能·python·prompt·aigc
betazhou1 小时前
Apache Seatunnel 抽取SQL server实时同步到Oracle(四)
数据库·oracle·apache·sql server·seatunnel
闻缺陷则喜何志丹1 小时前
【C++特性及类库】多线程
开发语言·c++·多线程·语言特性·系统库
l1t1 小时前
DeepSeek总结的PostgreSQL 的 MVCC 很糟。其他所有的也一样。第1部分
数据库·postgresql
川石课堂软件测试1 小时前
JMeter异步接口测试实战
数据库·python·jmeter·mysql·kubernetes·测试用例·prometheus
dtq04241 小时前
C++3 - 分支语句if和string变量
开发语言·c++·学习