我正在从数据库中获取一个长度为80k至90K个字符的字符串。
我想删除所有前导white-spaces
并获得大约50k个字符的substring
并将其存储到StringBuilder
中,因为我必须将此作为参数传递给另一个函数。 / p>
代码:
StringBuider sb = new StringBuilder(dr["str"].ToString().TrimStart().SubString(0,50000));
但是我遇到以下异常:
mscorlib.dll中发生了'System.ArgumentOutOfRangeException'类型的未处理异常
其他信息:索引和长度必须引用一个位置 在字符串中。
可以确保即使在修剪后,字符串也将超过50k个字符。
如果我先修剪然后得到子串,那么它工作正常。
背后的原因可能是什么? substring()
不能对正在运行的字符串进行演奏吗?
答案 0 :(得分:4)
似乎此表中并非所有字符串的Length
都是>= 50000
(至少不是在TrimStart
之后)。如果字符串较短,则会出现此异常。这样更安全,更易读,更有效:
string str = dr["str"].ToString().TrimStart();
if(str.Length > 50000)
str = str.Remove(50000); // or Substring(0,50000)
var sb = new StringBuilder(str);