foreach循环未按预期值启动控制台输出

本文关键字:启动 控制台 输出 循环 foreach | 更新日期: 2023-09-27 17:58:55

当我用以下代码迭代列表时,我得到了一个列表集合的意外起始值:

var lister = new List<int>();
for (int i = 0; i <= 300; i++)
{
    lister.Add(i);
}
foreach (var item in lister)
{
    Console.WriteLine(item);
}

控制台的第一个输出是2,而不是预期的0。如果我对数组执行此操作,它会像预期的那样正常工作。换句话说,控制台的输出从0开始。为什么上面的for循环没有从0开始向lister集合对象添加值,而是从数字2开始添加值,并向上添加值?

当我使用以下代码对数组进行迭代时,不会出现此问题:

var myArray = new int[300];
for (int i = 0; i < 300; i++)
{
    myArray[i] = i;
}
foreach (var item in myArray)
{
    Console.WriteLine(item);
}

foreach循环未按预期值启动控制台输出

Selman22的答案是您所看到的正确原因——控制台默认有300行的缓冲区。最后300行之前的所有内容都会从控制台窗口中滚动并丢失。

你可以更改缓冲区,将其增加到你需要的任何大小:

Console.BufferHeight = 9999;
...
// now you'll be able to scroll up and see all your numbers
foreach (var item in lister)
{
    Console.WriteLine(item);
}

实际上它正在显示0,但您可以看到它,因为您的控制台大小不够大。尝试:

foreach (var item in lister)
{
    Console.WriteLine(item);
    if(item % 100 == 0) Console.Read();
}

然后按enter键查看下一个100数字。