【问题标题】:Assigning random values using ForEach to array doesnt work, but for statement works fine?使用 ForEach 将随机值分配给数组不起作用,但 for 语句可以正常工作吗?
【发布时间】:2013-08-19 07:40:46
【问题描述】:

如果我使用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 循环可以很好地打印值吗?

谢谢

【问题讨论】:

标签: c#


【解决方案1】:

foreach 循环中的迭代器(在本例中为 item)表示每个 被枚举,而不是每个索引 - 正如 ifor 循环中所做的那样。此外,当您初始化int[] 时,每个项目都将具有int 的默认值,即0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多