1

是否可以检查Random班级使用什么种子?

我正在使用 Random() 类,然后 Next(int, int) 方法确实会生成一些整数以供以后计算。我需要程序每次都在不同的随机数上运行,但有时我会遇到我想调查的错误。是否可以从 Random 类中获取种子,所以如果出现错误,我可以再次使用相同的种子并获得相同的随机生成数?

4

3 回答 3

3

我认为您应该使用所需的种子创建一个 Random 对象,而不是检查它。

Random rnd1 = new Random(); // Different seed every run
Random rnd2 = new Random(1234); // Always generates the same numbers sequence

Random() 构造函数使用系统时钟来提供种子值。这是实例化随机数生成器的最常用方法。

在这里查看更多信息。

于 2014-11-09T11:36:28.533 回答
0

无法获取Random构造时使用的种子,因为该值未存储在构造函数之后。

详见源代码System.Random

您可以创建一个包装器来System.Random存储您创建它的种子,并使用该类代替。

class MyRandom : Random
{
    public readonly int Seed;

    public MyRandom(int seed) : base(seed)
    {
        Seed = seed;
    }
}
于 2014-11-09T11:39:12.063 回答
0

您是否尝试在 Random 实例上使用反射?

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

于 2014-11-09T11:39:41.097 回答