随机数种子面向.NET框架的相同版本

问题描述:

可能重复:
Random number seed targeting the same version of the .NET framework随机数种子面向.NET框架的相同版本

是否每个CPU返回基于如果我的应用目标上相同的种子相同的随机序列.NET框架3.5?我想知道你是否得到和我一样的结果。我也希望每个分发我的应用程序的人都能获得相同的结果。谢谢!

Random a = new Random(44448); 
int i1 = a.Next(65, 90); 
MessageBox.Show(i1.ToString()); 
+1

然后它不会是随机的吗? – 2012-07-23 19:47:50

+0

你不应该依赖这个返回相同的值 - 即使在你自己的系统上 - 即使它现在可能会做。如果微软发布了一个修补.NET的补丁来改变行为,那么你的代码就会崩溃,并且你很难再追查下来, – ChrisF 2012-07-23 19:48:15

+0

我认为我们应该重新打开其他的编辑问题。马克对此有了一个深思熟虑的答案。 – 2012-07-23 19:48:54

是的,如果你有相同的种子,你会得到相同的随机数,每次都是相同的顺序。这是设计。当你想这样做的例子:

  • 当测试一个程序时,你可以使用一个固定的种子,这样你就可以得到相同的结果。
  • 如果您记录程序中使用的种子,并且出现问题,那么您可以确定结果随机数,以便您可以尝试重现该错误。
  • 如果要测量性能,可以使用固定种子,以便在不同运行时不会获得不同的数据。

默认情况下(意思是当您指定没有种子时)系统时间将被使用。这里的一般想法是,你只需要一个“随机”数字,使用这个数字就可以制作更多的“随机”数字。如果你把当前的时间缩短到一些真正的非常小的精度水平,那么它确实是非常随机的。大多数情况下,只要您确定不会创建新实例Random(因此它们不具有相同的种子),就可以接受此默认行为。你也可以通过更安全的算法生成一个随机数,并将其作为种子传入。 (我见过的一个例子是创建一个新的GUID并将其作为种子传递给它,这实际上是一个不错的想法。)