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この場合) は、ループ内のように各インデックスではなく、列挙される各を表します。また、 を初期化すると、すべてのアイテムの のデフォルト値が 0 になります。iforint[]int

これら 2 つの要素を組み合わせると、ループ内の項目をループしている場合foreachitem常に 0 になるため、常に配列の最初の項目のみが更新されます。

于 2013-08-18T23:31:28.150 に答える