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

时间:2014-04-19 00:14:00

标签: c# loops for-loop foreach

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

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开始向列表集合对象添加值,而是开始从数字2和病房添加值?

当我使用以下代码遍历数组时,不会发生此问题:

var myArray = new int[300];

for (int i = 0; i < 300; i++)
{
    myArray[i] = i;
}

foreach (var item in myArray)
{
    Console.WriteLine(item);
}

2 个答案:

答案 0 :(得分:2)

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

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

按回车键查看下一个 100 号码。

答案 1 :(得分:2)

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);
}