检查Random类使用的种子

本文关键字:种子 Random 检查 | 更新日期: 2023-09-27 18:29:55

是否可以检查Random类使用的种子?

我使用Random()类,然后使用Next(int,int)方法生成一些整数供以后计算。我需要程序每次在不同的随机数上运行,但我有时会遇到错误,我想调查一下。有没有可能从Random类中获得种子,这样在出现错误的情况下,我可以再次使用相同的种子,并获得相同的随机生成数?

检查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实例上使用反射?

否则,您可以使用包装器来存储种子值,甚至使用包装器创建具有种子值的文件。在测试整个过程时,再次从文件中加载种子以产生相同的伪随机值。