索引和长度必须指向带有字符串的位置。参数名称:长度错误

时间:2017-04-03 18:58:39

标签: c# substring indexof

我的程序最近收到此错误,我不知道为什么。触发它的代码是:

foreach (var lot in item.LotNum.Split('|'))
{
    string vendor = string.Empty;
    if (lot.Trim().Contains("-"))
    vendor = lot.Trim().Substring(0, item.LotNum.IndexOf("-"));
}
当错误触发时,

LotNum =“br549 | BR549 | 570-PRIOR”并且批次为“570-PRIOR”(没有引号)。我之前没有使用IndexOf所以我不确定发送的字符串有什么问题。我想事先检查是什么原因导致错误,因为例外是停止程序和坏数据将会有一段时间,直到它被修复,并且将来可能会添加更多。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

根据您的代码更新的新答案:

var lots = item.LotNum.Split('|');
foreach (var lot in lots)
{
    string vendor = string.Empty;
    if (lot.Contains("-"))
     vendor = lot.Substring(0, lot.IndexOf("-")).Trim();
}

同样,您使用IndexOf作为不同于您想要获得子字符串

的变量

答案 1 :(得分:1)

您正在将IndexOf用于与您想要获取子字符串的变量不同的变量,因此,索引将超出范围。

尝试:已编辑

variable = variable.Trim();
int index = variable.IndexOf("-");
if (index > 0)
 variable.Substring(0, index);

答案 2 :(得分:0)

另一种方法是使用Contains检查字符是否存在,如果找到它使用IndexOf,否则只需使用Length的{​​{1}}字符串(并在最后添加Trim以避免在修剪后使用Length时出现问题:

variable.Substring(0, variable.Contains('-')
    ? variable.IndexOf('-')
    : variable.Length)
    .Trim();