无法修剪字符串并在同一条语句中获取子字符串

时间:2018-07-06 13:30:58

标签: c# .net string substring

我正在从数据库中获取一个长度为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()不能对正在运行的字符串进行演奏吗?

1 个答案:

答案 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);