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` 等序列化库,而不是手动拼接字符串。

相关推荐
10年前端老司机15 分钟前
Milvus 8种检索能力实践
数据库·python·agent
FRing0325 分钟前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
旖旎夜光27 分钟前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
Decay__33 分钟前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构
freejackman40 分钟前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql
starzy19901 小时前
深入理解Scala嵌套函数:作用域封装之道
开发语言·scala
Sakura_j_h_1 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
白杨尚青3 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
.道阻且长.3 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
codigger3 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员