You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#出现索引越界错误,求排查string.Format代码问题

错误原因与修正方案

错误根源

你调用string.Format的方式存在问题:

  • string.Format的第一个参数是带占位符的格式字符串(比如{0}、{1}),后续参数才是对应占位符的替换值。
  • 你当前只给string.Format传了一个参数(_Services.GetSettingValue的返回值),如果这个返回值里包含占位符,string.Format会尝试寻找对应的替换参数,但你并未提供,因此触发「索引必须大于或等于零且小于参数列表大小」的错误。

另外你可能混淆了参数逻辑:spec.obscLabel ?? consOrder.Location.Code是GetSettingValue的第二个入参,而非string.Format的替换参数。

修正方案

分两种场景处理:

场景1:仅获取配置值,无需格式化

如果GetSettingValue返回的就是最终要用的字符串,直接去掉string.Format即可:

var template = _Services.GetSettingValue("ZP", spec.obscLabel ?? consOrder.Location.Code);

场景2:需要格式化配置字符串(含占位符)

如果GetSettingValue返回的是带占位符的格式串(比如"库区编码:{0}"),则要把格式串和替换参数分别传给string.Format:

// 先获取带占位符的格式字符串
var formatString = _Services.GetSettingValue("ZP", spec.obscLabel ?? consOrder.Location.Code);
// 传入对应占位符的替换参数(示例用consOrder.Location.Code,可按需调整)
var template = string.Format(formatString, consOrder.Location.Code);

内容的提问来源于stack exchange,提问作者madan pur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:45:24