Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表中的项目计数未按预期工作_C#_Text Files - Fatal编程技术网

C# 列表中的项目计数未按预期工作

C# 列表中的项目计数未按预期工作,c#,text-files,C#,Text Files,我有一个包含91项的清单。目前,我使用StreamWriter循环并将每一行写入文本文件。我想将列表除以3,所以在30个项目之后,我想插入一个空行。到目前为止我有 foreach (var item in textList) { //write to file counter++; if (counter == totalItems / 3) { await sw.WriteLineAsync(Environment.NewLine); } } 但它只

我有一个包含91项的清单。目前,我使用StreamWriter循环并将每一行写入文本文件。我想将列表除以3,所以在30个项目之后,我想插入一个空行。到目前为止我有

foreach (var item in textList)
{
   //write to file
   counter++;
   if (counter == totalItems / 3)
   {
      await sw.WriteLineAsync(Environment.NewLine);
   }
}
但它只适用于前30项。请注意,该列表可以包含任意数量的项目,但此特定项目包含91项。然而,我总是要分成3。使用模。试试看:

 if (counter % (totalItems / 3) == 0)
 {
   ...
使用模。试试看:

 if (counter % (totalItems / 3) == 0)
 {
   ...

您可以将91个项目的列表除以3,也可以在30个项目之后。你不能两者兼得。如果你在每30个项目之后做一次,你会把第91个项目从其余的项目中分离出来,在它自己的“块”,即。1-30, 31-60, 61-90, 91. 如果你有91个项目,并且想要除以3,你应该每31个项目做一次,这就是为什么我使用Math.Ceiling。这样你就有了1-31,32-62和63-91

另外,不要使用foreach和计数器;改用for循环。你可以使用模运算符。因此:

int third = Convert.ToInt32(Math.Ceiling(textList.Count / 3.0));
int divider = third - 1;

for (int i = 0; i < textList.Count; i++)
{
    var itemToWrite = textList[i];
    //write to file

    if (i % third == divider) await sw.WriteLineAsync(Environment.NewLine);
}

您可以将91个项目的列表除以3,也可以在30个项目之后。你不能两者兼得。如果你在每30个项目之后做一次,你会把第91个项目从其余的项目中分离出来,在它自己的“块”,即。1-30, 31-60, 61-90, 91. 如果你有91个项目,并且想要除以3,你应该每31个项目做一次,这就是为什么我使用Math.Ceiling。这样你就有了1-31,32-62和63-91

另外,不要使用foreach和计数器;改用for循环。你可以使用模运算符。因此:

int third = Convert.ToInt32(Math.Ceiling(textList.Count / 3.0));
int divider = third - 1;

for (int i = 0; i < textList.Count; i++)
{
    var itemToWrite = textList[i];
    //write to file

    if (i % third == divider) await sw.WriteLineAsync(Environment.NewLine);
}

在写空白行之后,你必须将计数器重置为0。你要告诉它一次调用WruleLeNeSycNC:当计数器等于30。如果你要关心最后的计数,或者重置为PpPbBeNeNo.Stif。如果计数器% 30=0 {…}在每30个项目之后做一些可能的重复,在写空白行之后必须将计数器重置为0。如果您要关心最终计数,或者按照pappenbence的建议重置,则需要。如果计数器%30==0{…}在每30个项目之后做一些事情,如果我有一个仅包含20个项目的列表,那么这将如何工作?我仍然希望它被分成3个部分,如果totalItems是20,那么将有3个分隔符;6到7岁,12到13岁,18到19岁。我不认为这是@Code想要的,因为它将代码分成4个部分,而不是3个部分。如果我有一个只包含20个项目的列表,这将如何工作?我仍然希望它被分成3个部分,如果totalItems是20,那么将有3个分隔符;6到7岁,12到13岁,18到19岁。我不认为这是@Code想要的,因为它将代码分成4个部分,而不是3个部分。