Проверка того, какое семя используется классом Random

Можно ли проверить, какое семя используется классом Random?

Я использую класс Random(), а затем метод Next(int, int) генерирует некоторые целые числа для последующих вычислений. Мне нужно, чтобы программа каждый раз запускалась с разными случайными числами, но иногда возникают ошибки, которые я хотел бы исследовать. Можно ли получить начальное число из класса Random, чтобы в случае ошибок я мог снова использовать одно и то же начальное число и получить те же случайно сгенерированные числа?


person Sebastian Widz    schedule 09.11.2014    source источник


Ответы (3)


Я думаю, что вместо того, чтобы проверять это, вы должны создать объект Random с нужным вам начальным числом.

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

Конструктор Random() использует системные часы для предоставления начального значения. Это наиболее распространенный способ запуска генератора случайных чисел.

Проверьте здесь< /strong> для получения дополнительной информации.

person VAndrei    schedule 09.11.2014

Невозможно получить начальное значение, с которым был создан Random, так как значение не сохраняется после конструктора.

Дополнительные сведения см. в исходном коде System.Random.

Вы можете создать оболочку для System.Random, в которой хранится семя, с которым вы его создали, и вместо этого использовать этот класс.

class MyRandom : Random
{
    public readonly int Seed;

    public MyRandom(int seed) : base(seed)
    {
        Seed = seed;
    }
}
person Rotem    schedule 09.11.2014

Вы пытались использовать отражение в экземпляре Random?

В противном случае вы можете использовать оболочку для хранения начального значения или даже использовать оболочку для создания файла с начальным значением. И при тестировании всего процесса снова загрузите начальное число из файла, чтобы получить те же псевдослучайные значения.

person Efstathios Chatzikyriakidis    schedule 09.11.2014