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

Index and length must refer to a location with the string. Parameter name: length error

我的程序最近收到此错误,我不确定原因。触发它的代码是:

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 所以我不确定发送的字符串有什么问题。我想事先检查导致错误的原因,因为异常正在停止程序和错误数据会存在一段时间直到修复,以后可能会添加更多。

如有任何帮助,我们将不胜感激!

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

尝试:已编辑

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

另一种方法是使用 Contains 检查字符是否存在,如果找到则使用 IndexOf,否则就使用字符串的 Length (并将 Trim 放在末尾以避免在修剪后使用 Length 出现问题):

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

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

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 的变量与您想要获取子字符串的变量不同