为什么这个随机数发生器不是随机的?

时间:2010-12-07 12:12:13

标签: c# .net wpf random

  

可能重复:
  Why does it appear that my random number generator isn't random in C#?
  Random number generator not working the way I had planned (C#)

我有这种方法来计算随机值:

private double getMetrics(SourceFile sf)
        {
            Random r = new Random();
            return (r.NextDouble());
        }

然而,它总是返回相同的数字,在我的情况下为0.41500350386603

为什么????

2 个答案:

答案 0 :(得分:9)

new Random()使用当前时间作为种子值。因此,如果您在很短的时间内多次调用此函数,它可能会返回相同的值。以下是MSDN的解释:

  

默认种子值源自系统时钟并具有有限的分辨率。因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,因此将生成相同的随机数集。使用单个Random对象生成所有随机数可以避免此问题。

答案 1 :(得分:0)

只需声明方法中的随机数,每次调用方法时,都会创建新数字,除非它被处理并重新创建。重新创建时,数字将与重新开始相似。如果您想要“更多”唯一数字,可以在创建随机数之前等待几毫秒。如果你想要非常独特的数字,GuID会更好。