我想了解 C# Random.next()
是如何工作的,所以我开始搜索一些东西,然后我将它标记为红色,它从时钟中获取随机种子,如下所示:DateTime.Now .毫秒
。所以我想如果你连续创建很多随机对象它会吐出相同的数字,我想检查一下并创建这个代码片段。
static void Main(string[] args)
{
Random rn;
while (true)
{
rn = new Random();
Console.WriteLine(DateTime.Now.Millisecond.ToString());
Console.WriteLine(rn.Next(10));
}
}
当我运行它时,我当然得到了很多相同的数字,但我认为当 DateTime.Now.Millisecond
将要改变时,它也会改变随机数,但正如您在此输出中看到的那样,情况并非如此。
9
127
9
127
9
127
9
127
9
127
9
127
9
127
9
128
9
128
9
128
9
128
9
128
9
那么为什么 DateTime.Now.Millisecond
改变时随机数没有改变?请注意,我刚刚开始学习 C#,所以如果我犯了很多错误,我深表歉意。
最佳答案
根据source code ,无参数构造函数定义为:
public Random()
: this(Environment.TickCount) {
}
这意味着它不使用 DateTime.Now.Millisecond
作为种子,而是使用 Environment.TickCount
值。
所以如果你这样写你的代码:
Random rn;
while (true)
{
rn = new Random();
Console.WriteLine(Environment.TickCount);
Console.WriteLine(rn.Next(10));
}
它应该产生预期的输出。试试吧!
关于c# - C# Random 类是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39054773/