当我使用以下代码遍历列表时,我得到一个列表集合的意外起始值:
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);
}
答案 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);
}