C#随机生成

我刚刚在线传递了这篇文章: C#Corner和C#Corner以及他的文章(拥有超过13年经验的软件开发人员)建议使用System.Random ,如下所示:

 private int RandomNumber(int min, int max) { Random random = new Random(); return random.Next(min, max); } 

这不是每次给他相同的号码吗?

编辑:
所以我的问题将变成:随机选择种子如何? 恒定或当前时间值?

谢谢

当在短时间间隔内经常调用该方法时,它将给出相同的结果。 这是因为Random s种子用当前时间值初始化。 这也是为什么很多人都有随机不随机的问题。

顺便说一句,它不是Math.Random而是System.Random


编辑之后,这里有一些关于如何初始化随机的信息。 信息来自上面的链接。

随机数生成从种子值开始。 如果重复使用相同的种子,则生成相同的数字序列。 产生不同序列的一种方法是使种子值与时间相关,从而与每个新的Random实例产生不同的序列。 默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间的滴答数采用Int32值。 但是,由于时钟具有有限的分辨率,因此使用无参数构造函数以紧密连续的方式创建不同的随机对象会创建随机数生成器,从而生成相同的随机数序列。

您应该只初始化一次种子,然后重复使用它:

 private Random random = new Random(); private int RandomNumber(int min, int max) { return random.Next(min, max); } 

不,因为new Random()会以当前时间作为种子初始化。 那说你应该保留random实例random用它。

也许。 在没有明确种子的情况下Random创建基于当前时间的种子。 如果你足够快地调用RandomNumber ,你偶尔会得到相同的数字。

然而,你的直觉是正确的。 每次需要新号码时创建一个新的Random对象都是愚蠢的。 您应该创建一个实例并使用它。