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
相关产品推荐
相关产品推荐

