随机工作方式不同,具体取决于开始调试或“单步执行”

时间:2017-05-17 11:40:12

标签: c# for-loop random

for (int i = 0; i < 20; i++)
{
    byte wtf = (byte) new Random().Next(10);
    Console.Write(wtf + " ");
}

如果我逐步运行程序,此代码会生成预期的输出: 4 6 9 2 9 0 ....

但是,如果我只是点击Start Debugging或-Without Debugging就会发生这种情况: 7 7 7 7 7 7 ...

为什么?

1 个答案:

答案 0 :(得分:2)

因为你的循环发生得太快了。我相信,Random类使用系统时钟作为种子,当你的循环在相同的毫秒内运行时,它会获得相同的种子。

以下是您真正需要做的事情:在您的循环

之外实例化Random

var rand = new Random();

for (int i = 0; i < 20; i++)
{
    byte wtf = (byte) rand.Next(10);
    Console.Write(wtf + " ");
}