1

如果我使用foreach循环将值随机分配给数组,它会分配所有 0。但是,如果将其更改为正常for循环,则可以正常工作。像下面

 Random random = new Random();
 int[] a = new int[10];
 for (int i = 0; i < 10; i++)
   {
      a[i] = random.Next(0, 10);
   }

foreach (var item in a)
       Console.WriteLine(item);

输出很好,值是随机的

5
8
...

但是,如果我使用 foreach 循环分配随机值,则第一个数组项具有随机值,其余的始终为 0.... 为什么会这样?

 foreach (var item in a)
        {
            a[item] = random.Next(0, 10);
        } 

 foreach (var item in a)
           Console.WriteLine(item);

这会产生

8
0
0
0... all zeros follow

为什么正常的 for 循环可以正常工作,而 foreach 循环却不行?相同的 foreach 循环可以很好地打印值吗?

谢谢

4

1 回答 1

4

foreach循环中的迭代器(item在这种情况下)表示每个被枚举的,而不是每个索引——就像循环i中那样。for此外,当您初始化 时int[],每个项目都将具有 的默认值int,即 0。

这两个因素加在一起意味着当您遍历循环中的项目时foreachitem它始终为 0,因此它始终只更新数组中的第一项。

于 2013-08-18T23:31:28.150 回答