String.Substring在索引大于100000时不起作用

本文关键字:100000时 不起作用 大于 索引 Substring String | 更新日期: 2023-09-27 17:58:13

我正在尝试拆分一个字符串对象,以便将其存储在NO-SQL数据库中,该数据库的每列存储容量不超过64kb,我的字符串长度为220kb。

我所做的是将我所拥有的任何字符串分割成若干段。我正试图把它分成4个,比如:

int howManyBytes = System.Text.ASCIIEncoding.ASCII.GetByteCount(serializedObject);
if (howManyBytes > 64000)
{
     //divide by 4
     int whereToSplit = Convert.ToInt32(howManyBytes * 0.25);
     returnValue.MethodReturnValue = serializedObject.Substring(0, whereToSplit);
     returnValue.MethodReturnValue2 = serializedObject.Substring(whereToSplit, whereToSplit * 2);
     returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit * 3);
     returnValue.MethodReturnValue4 = serializedObject.Substring(whereToSplit * 3);
}

当我想做returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit * 3)时,我遇到了问题,索引超出了范围。当我的字符串长度为225358,whereToSplit为56340时,就会出现这个问题。

知道为什么会发生这种事吗?

String.Substring在索引大于100000时不起作用

String.Substring的第二个参数是要返回的长度,而不是第二个拆分位置。这不能超过字符串的末尾。因此,它应该是:

returnValue.MethodReturnValue = serializedObject.Substring(0, whereToSplit);
returnValue.MethodReturnValue2 = serializedObject.Substring(whereToSplit, whereToSplit); // No *2
returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit); // No *3
returnValue.MethodReturnValue4 = serializedObject.Substring(whereToSplit * 3);

此外,225358 * 0.25实际上是56339.5,并且四舍五入向上。您可能需要考虑到这一点,因为您的最后一个字符串最终会比其他字符串更短。(不过,在您的场景中,这可能很重要,也可能无关紧要。)