 <p>Your code will return same values for <code>fooIndex1</code> and <code>fooIndex2</code> only if <code>DateTime.Now.Millisecond</code> is the same for different runs. It's specified in <a href="https://msdn.microsoft.com/en-us/library/ctssatww(v=vs.110).aspx" rel="nofollow">Random</a> class specification. I've have run your code twice. First run gives <code>fooIndex1 = 0, fooIndex2 = 2</code> and the second <code>fooIndex1 = 1, fooIndex2 = 3</code>.</p> <p>Strange that you use <code>r.Next(4)</code>. May be it's better to use <code>r.Next(foosList.Count)</code> to be able to access all items in your <code>foosList</code>.</p>