.net 如何从已创建的随机列表中获取种子

.net 如何从已创建的随机列表中获取种子,.net,vb.net,random,.net,Vb.net,Random,我必须能够重复用我的代码做的实验,它会产生一些随机数,我需要得到我新的random()语句的初始化值。我用这个句子来造出我使用的随机对象 Dim r As Random = New Random() 正如我所读到的,它从system datetime获取初始化值。如果实验成功,我就需要能够重复它。我如何获得初始化编号才能执行以下操作: Dim r As Random = New Random(OldInitializationValue) 我想每次执行我的应用程序时,我都必须自己创建一个初

我必须能够重复用我的代码做的实验,它会产生一些随机数,我需要得到我新的random()语句的初始化值。我用这个句子来造出我使用的随机对象

Dim r As Random = New Random()
正如我所读到的,它从system datetime获取初始化值。如果实验成功,我就需要能够重复它。我如何获得初始化编号才能执行以下操作:

 Dim r As Random = New Random(OldInitializationValue)
我想每次执行我的应用程序时,我都必须自己创建一个初始化值,但是如果有一个方法可以保存它,我很高兴知道它


提前感谢您的回答。

Random
不会公开初始种子,甚至不会存储它,因此无法检索它。因此,你必须使用一种可以自己储存种子的方法

Dim mySeed As Int32 = Environment.TickCount ' store it somewhere '

Dim myRandom = New Random(mySeed)
For i As Int32 = 1 To 10
    Console.WriteLine(myRandom.Next(1, 100))
Next

' somehwere else
myRandom = New Random(mySeed)
For i As Int32 = 1 To 10
    Console.WriteLine(myRandom.Next(1, 100))
Next

现在,您可以使用相同的种子创建一个随机实例,以获得相同的伪随机值序列。

您不能。这就是“随机”的意义所在。如果您想要可重复序列,您还需要在第一次调用中显式指定种子。显然,种子值可以由构造函数显式设置;是否可以选择将种子值存储在其他地方以供以后参考?PS:R中的任何课程都说明需要存储种子以实现重复性。他们还解释说,不能使用加密RNG,因为它们是不可重复的。如果您想对某些内容使用相同的随机值集,可以使用Mersenne Twister。它是否适用于你正在做的事情还不清楚。Random技术上不会暴露初始种子,甚至不会“保存”任何地方的种子。它会立即使用它,然后丢弃它。@xanatos:添加了它,谢谢。代码看起来有点奇怪。为什么种子值在构造函数末尾被1覆盖?出于安全原因?