是否可以检查Random
班级使用什么种子?
我正在使用 Random() 类,然后 Next(int, int) 方法确实会生成一些整数以供以后计算。我需要程序每次都在不同的随机数上运行,但有时我会遇到我想调查的错误。是否可以从 Random 类中获取种子,所以如果出现错误,我可以再次使用相同的种子并获得相同的随机生成数?
是否可以检查Random
班级使用什么种子?
我正在使用 Random() 类,然后 Next(int, int) 方法确实会生成一些整数以供以后计算。我需要程序每次都在不同的随机数上运行,但有时我会遇到我想调查的错误。是否可以从 Random 类中获取种子,所以如果出现错误,我可以再次使用相同的种子并获得相同的随机生成数?
我认为您应该使用所需的种子创建一个 Random 对象,而不是检查它。
Random rnd1 = new Random(); // Different seed every run
Random rnd2 = new Random(1234); // Always generates the same numbers sequence
Random() 构造函数使用系统时钟来提供种子值。这是实例化随机数生成器的最常用方法。
在这里查看更多信息。
无法获取Random
构造时使用的种子,因为该值未存储在构造函数之后。
详见源代码。System.Random
您可以创建一个包装器来System.Random
存储您创建它的种子,并使用该类代替。
class MyRandom : Random
{
public readonly int Seed;
public MyRandom(int seed) : base(seed)
{
Seed = seed;
}
}
您是否尝试在 Random 实例上使用反射?
否则,您可以使用包装器来存储种子值,甚至可以使用包装器来创建具有种子值的文件。并且在测试整个过程时,再次从文件中加载种子以产生相同的伪随机值。