随机的工作方式因"开始调试"或""Step Into/Over"而异"


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

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

但是,如果我只是点击开始调试或 - 不调试,就会发生这种情况:7 7

7 7 7 7...

为什么?

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

以下是您真正需要做的:在循环之外实例化Random

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

最新更新