2

I need to generate random int in C#. I am using clock time to set the seend. However, as the rnd.Next() function may take less than a millisecond, this does not work if one has to generate a list of ints.

        for( int i=0; i<5; i++) {
            int max_val = 10; // max value
            var rnd = new Random(DateTime.Now.Millisecond);
            int randind = rnd.Next(0, max_val);
            Console.WriteLine(randind);
        }

Output:
1 5 5 5 5

How can one randomise the seed in a clean way without adding an ugly sleep?

0

2 Answers 2

8

Create your Randomobject outside the loop and don't provide the seed parameter -- one will be picked for you. By taking it out of the loop, rnd.Next() will give you a random sequence anyway.

   var rnd = new Random();     
   for( int i=0; i<5; i++) {
        int max_val = 10; // max value
        int randind = rnd.Next(0, max_val);
        Console.WriteLine(randind);
    }
Sign up to request clarification or add additional context in comments.

Comments

5

The Guid object guaranties a different result each time. You could do this:

... new Random(Guid.NewGuid().GetHashCode()) 

1 Comment

The guid's expensive, and the hashcode's not guaranteed to be unique, so you're better off ignoring the seed constructor and just not constructing the Random instances over and over.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.