C# 无法从字符串中提取子字符串

C# 无法从字符串中提取子字符串,c#,.net,substring,C#,.net,Substring,我是长字符串数组,我想一次性将它以250个字符的块传递给另一个函数,我编写了以下代码: var cStart = 0; var phase = 250; var cEnd = cStart + phase; var count = 0; while (count < 10000) { string fileInStringTemp = ""; fileInStringTemp = fileInString.Substring(cStart, cEnd); var

我是长字符串数组,我想一次性将它以250个字符的块传递给另一个函数,我编写了以下代码:

var cStart = 0;
var phase = 250;
var cEnd = cStart + phase;
var count = 0;

while (count < 10000)
{
    string fileInStringTemp = "";
    fileInStringTemp = fileInString.Substring(cStart, cEnd);
    var lngth = fileInStringTemp.Length;

    //Do Some Work

    cStart += phase;
    cEnd += phase;
    count++;
}
在循环的第一次迭代中,lngth的值是250,这很好,在下一次迭代中,我也希望它是250,因为我从250-500个字符中提取子字符串,但令人震惊的是,第二次迭代中lngth变量的值是500

为什么呢?我还尝试每次在循环中初始化字符串变量,使其从零开始,但没有增益。

,而不是停止索引

public string Substring(
    int startIndex,
    int length
)
因此,您所需要做的就是更改代码,使其具有开始索引和长度阶段

试着改变

fileInStringTemp = fileInString.Substring(cStart, cEnd);


Substring具有参数startIndex、count,因此您不会大声说出递增结束。最好改为SubstringcStart,phase

SubString方法的第二个参数是要返回的子字符串的长度。您应该能够始终使用250,只需不断移动起始点(第一个参数),直到完成为止。

以下是有关如何使用子字符串的MSDN链接:

根据MSDN,子字符串方法中的第一个参数是StartIndex,它被定义为子字符串从零开始的字符位置,第二个参数用于定义子字符串的长度,它被定义为子字符串中的字符数

所以你应该试试这个:

var cStart = 0;
var phase = 250;
var count = 0;

while (count < 10000)
{
    string fileInStringTemp = "";
    fileInStringTemp = fileInString.Substring(cStart, phase);
    var lngth = fileInStringTemp.Length;

    //Do Some Work
    count++;
    cStart = phase * count + 1;
}
fileInStringTemp = fileInString.Substring(cStart, cPhase);
var cStart = 0;
var phase = 250;
var count = 0;

while (count < 10000)
{
    string fileInStringTemp = "";
    fileInStringTemp = fileInString.Substring(cStart, phase);
    var lngth = fileInStringTemp.Length;

    //Do Some Work
    count++;
    cStart = phase * count + 1;
}